处理依赖注入&任意简单类

时间:2015-10-26 18:21:33

标签: php oop dependency-injection

我正在重构中等规模的MVC框架以使用依赖注入,从服务定位器类+各种其他技术的混合转向更一致的服务提供者/服务容器模型类似于Laravel。一般来说,它进展顺利。

我慢慢逐步淘汰并试图避免的一件事就是依赖服务容器本身。当我转向某些类型的工厂时,这很好。当涉及更重要的结构骨骼如控制器和存储库等时,这似乎很有意义。但是,有一件事我很难得到我的围绕如何为简单的类来做这个,你可能需要加载各种实例,只需要在这里或那里的奇数或具有就地构造需求。例如,我可能想要多次实例化REST客户端,或者将某些字符串处理实用程序传递给构造函数,但我也可能只希望在15个存储库中的1个存储库中执行此操作,自己的工厂类。

  • 为小东西创建一个套装工厂显然是禁忌,因为它们与不同的东西有关并且你失去了封装/清晰的目的
  • 为每一个创建一个特定的工厂类似乎有点矫枉过正,并且将它注入各种类型的类似乎也有点过分(即上面提到的15个中的14个不需要它)< / LI>
  • 包括服务容器在某种程度上违背了练习的目的
  • 拥有一个全球性的“制造”&#39;函数(如Laravel 4中的App:make(),即使它实际上不是正常的静态调用)也会让我们回到全局并远离依赖注入
  • 有一个静态构造函数(例如Symfony中的Request :: createFromGlobals)阻止我实际注入我需要的东西

到目前为止,我已经注入了15个中的1个所需的类,并且在一个案例中与它一起生活,在另一个案例中,它实际上并不需要任何依赖项,所以我只是直接实例化它虽然我的直觉告诉我不要(猜测是什么,我的直觉是对的,一天之后它现在可能与依赖或至少建筑服务有关)。

你阅读的大多数建议只涉及大图片/理想化的例子,但感觉可能只是有一个细节,你只需要在项目的边缘捏造。事后有一些关于在设置属性中传递实例的说法,但这根本感觉不对,特别是如果你想要多个副本 - 你最终不得不明确的状态和类似的事情,当你真的想要一个新的时候。

那么我该如何改进这个呢?课程本身有问题吗?结构问题整体问题?

感谢。

0 个答案:

没有答案