问题描述
|
如果您使用模拟来测试对象之间的交互,则必须通过构造函数或特定方法来传递协作者。在足够复杂的应用程序中,您将有很多小的对象彼此交互。您如何在应用程序的最高级别管理整个对象图的构造?简而言之,您如何处理以下问题:
// arbitrarily complex
A a = new A(new B(new C(new D(new ...)),new E(new ...)),new F(new G(new ...)));
a.doSomething();
在这种情况下,依赖注入容器似乎是最好的解决方案。还有其他简化依赖管理的好策略吗?
解决方法
给出的示例只是穷人的DI。只要您将自己限制为在应用程序的“合成根”(入口点)中组成整个对象图,就可以了。 (顺便说一句,最近,我听说Dan North称其为'new'是新的'new'-暗示Java社区中的人们开始转向使用这种构造对象图的方式,而不是使用容器)。
但是,只要遵循“注册解析发布”模式,您当然也可以使用DI容器。特别是在基于请求的应用程序(Web应用程序和服务)中,使用Poor Man's DI管理生命周期可能会很复杂,因此在这些类型的应用程序中,容器可能会非常有帮助。
, 据我所知,保持所有这些依赖关系受控的唯一方法是创建一个可以传递的通用Context对象(即使它具有复杂性),或者将IoC与构造函数注入一起使用。
特别是在您给出的示例中,CI是一个很好的解决方案,因为您可以通过简单地配置容器来管理复杂性。
只是我的2美分...