【问题标题】:Managing dependencies管理依赖项
【发布时间】:2011-09-04 21:10:27
【问题描述】:

如果您使用模拟来测试对象交互,则必须通过构造函数或特定方法传递协作者。在一个足够复杂的应用程序中,您将拥有许多相互交互的小对象。您如何在应用程序的最顶层管理整个对象图的构建?简而言之,您如何处理以下情况:

// arbitrarily complex
A a = new A(new B(new C(new D(new ...)), new E(new ...)), new F(new G(new ...)));
a.doSomething();

在这种情况下,依赖注入容器似乎是最好的解决方案。还有其他简化依赖管理的好策略吗?

【问题讨论】:

    标签: dependency-injection tdd mocking dependencies


    【解决方案1】:

    给出的例子只是Poor Man's DI。只要您将自己限制在应用程序的组合根(入口点)中的composing the entire object graph,您就会做得很好。 (顺便说一句,我最近听到 Dan North 将其称为 'new' is the new 'new' - 暗示 Java 社区中的人们开始回到这种构建对象图的方式而不是使用容器)。

    但是,您当然也可以使用 DI 容器,只要您遵循 Register Resolve Release 模式即可。特别是在基于请求的应用程序(Web 应用程序和服务)中,使用 Poor Man 的 DI 管理生命周期可能很复杂,因此在这些类型的应用程序中,容器可能非常有用。

    【讨论】:

      【解决方案2】:

      据我所知,控制所有这些依赖项的唯一方法是创建一个可以传递的通用 Context 对象(但即使这样也有其复杂性),或者将 IoC 与构造函数注入一起使用。

      特别是在您给出的示例中,CI 是一个很好的解决方案,因为您只需配置容器即可管理复杂性。

      只要我的 2 美分...

      【讨论】:

      • CI = 构造函数注入。很抱歉造成混乱。
      猜你喜欢
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      相关资源
      最近更新 更多