我对使用依赖注入设计代码框架有一些疑问:
FLOW3或Doctrine使用注释将类实例注入对象属性。这是通过代码反射完成的......性能是baaaaad:D
您如何看待这种方法?
class Test extends Injector {
protected $abc = '@Inject:/namespace/classname';
}
Injector 只是遍历类属性并查找字符串是否以给定类的开头@Inject
并创建对象。
它很酷还是很烂?
如果您没有使用带有 Doctrine 注释的缓存(这比您的解决方案更优雅,这将非常难以调试 [这实际上是它的唯一问题,除了您需要带有 '@Inject 的字符串的情况' 在其中] 如果出现问题),那么你做错了。在生产环境中,如果您正确设置缓存(请参阅文档),您将不会遇到任何问题 :)
好吧..使用反射很慢。这是无可争辩的。但是有一个可行的解决方法:使用 APC 缓存每个类实例的依赖项。
也就是说,您必须了解,您所说的不是依赖注入(这是设计模式),而是依赖注入容器(DIC)。
DIC 通常是框架(或其中的一部分),它们试图自动化在代码中使用依赖项的过程。这通常是服务定位器(“全局注册表”的一个漂亮名称)anitpattern,具有不同程度的危害。
所以......我的建议是这样的: