Php 处理依赖注入&;任意简单类
我正在重构一个中等规模的MVC框架,以使用依赖注入,从服务定位器类+各种其他技术的混合,转向类似于Laravel的更一致的服务提供者/服务容器模型。总的来说,进展顺利 我正在逐步淘汰并试图避免的事情之一是对服务容器本身的依赖。当我转向某些类型的类的工厂时,这是正常的,当涉及到更重要的结构骨骼(如控制器和存储库等)时,这似乎是很有意义的,我一直在绞尽脑汁想的一件事是,如何为简单类做到这一点,您可能需要加载各种实例,只需要这里或那里的奇数实例,或者需要就地构建。例如,我可能想实例化一个REST客户机几次,或者某种字符串处理实用程序,将其传递到构造函数中,但我也可能只想在15个存储库中的1个上执行此操作,这些存储库已经有了自己的工厂类Php 处理依赖注入&;任意简单类,php,oop,dependency-injection,Php,Oop,Dependency Injection,我正在重构一个中等规模的MVC框架,以使用依赖注入,从服务定位器类+各种其他技术的混合,转向类似于Laravel的更一致的服务提供者/服务容器模型。总的来说,进展顺利 我正在逐步淘汰并试图避免的事情之一是对服务容器本身的依赖。当我转向某些类型的类的工厂时,这是正常的,当涉及到更重要的结构骨骼(如控制器和存储库等)时,这似乎是很有意义的,我一直在绞尽脑汁想的一件事是,如何为简单类做到这一点,您可能需要加载各种实例,只需要这里或那里的奇数实例,或者需要就地构建。例如,我可能想实例化一个REST客户机
- 为小东西创建一个工作服工厂显然是不可能的,因为它们涉及不同的东西,你失去了封装性/目的的清晰性
- 为每一个类创建一个特定的工厂类似乎有点过头了,同时将它注入到每一种类型的类中也有点过头了(即上面提到的15个类中有14个不需要它)
- 包括服务容器在某种程度上违背了练习的目的
- 拥有一个全局“make”函数(比如Laravel4中的App:make(),尽管它实际上不是一个普通的静态调用)会让我们回到全局,远离依赖注入
- 拥有一个静态构造函数(例如Symfony中的Request::createFromGlobals)会阻止我实际注入所需的东西
谢谢。这个类的生存期是多久,1分还是15分?我想,在这种特殊情况下,“工厂”实际上是一个注册表?因为它创建的类的实例保留在它上面并被重用(除了构造需求之外,它们实际上是无状态的)。它是一堆业务逻辑所在的地方,是以前缺失的层的一部分,现在位于控制器和数据源之间。这个特殊的程序处理规则的某一部分(记住用户)并加密某些数据,它是唯一需要加密的程序。你听说过吗?我对同样大小的代码库进行了类似的重构,这真的救了我的命。我没听说过。不,谢谢。看一看,它并没有真正解决我的问题,只是重复了关于不让喷油器进入的常识,而没有实际解释如何避免我描述的情况。虽然这可能会使一类集合使用不同于其他集合的构造参数变得更容易,但这在技术上我已经可以实现,例如,在工厂使用开关(虽然很笨重)。