0

我对使用依赖注入设计代码框架有一些疑问:

FLOW3Doctrine使用注释将类实例注入对象属性。这是通过代码反射完成的......性能是baaaaad:D

您如何看待这种方法?

class Test extends Injector {
    protected $abc = '@Inject:/namespace/classname';
}

Injector 只是遍历类属性并查找字符串是否以给定类的开头@Inject并创建对象。

它很酷还是很烂?

4

2 回答 2

1

如果您没有使用带有 Doctrine 注释的缓存(这比您的解决方案更优雅,这将非常难以调试 [这实际上是它的唯一问题,除了您需要带有 '@Inject 的字符串的情况' 在其中] 如果出现问题),那么你做错了。在生产环境中,如果您正确设置缓存(请参阅文档),您将不会遇到任何问题 :)

于 2012-07-07T23:54:26.137 回答
1

好吧..使用反射很慢。这是无可争辩的。但是有一个可行的解决方法:使用 APC 缓存每个类实例的依赖项。

也就是说,您必须了解,您所说的不是依赖注入(这是设计模式),而是依赖注入容器(DIC)。

DIC 通常是框架(或其中的一部分),它们试图自动化在代码中使用依赖项的过程。这通常是服务定位器(“全局注册表”的一个漂亮名称)anitpattern,具有不同程度的危害。

所以......我的建议是这样的:

  • 如果您别无选择使用 DIC 的代码库 - 使用缓存。广泛地。
  • 如果您不限于特定的第 3 部分库/框架 - 使用手动依赖注入
于 2012-07-08T00:00:01.690 回答