工厂,依赖注入或其他

时间:2015-11-18 13:32:13

标签: design-patterns language-agnostic factory-pattern

如下所示,在复杂对象创建的情况下该怎么做:

A a = new A();
B b = new B(a);
C c = new C(b);

在这种情况下,我应该尝试创建某种工厂,还是使用依赖注入容器,或者某种类型的构建器?

具体而言,我希望实现以下目标:

C c = factory.createC();

1 个答案:

答案 0 :(得分:2)

这取决于许多因素,包括:

  • A,B和C之间的相互依赖性(例如,它是功能/方法依赖,数据依赖还是混合?)
  • A,B和C - 单身人士的每个生命周期,每个请求(如果是在Web API的上下文中),每个分辨率或其他内容
  • 是否可以在应用程序启动时解析依赖关系图(例如,完全静态地,或基于启动配置),或者解析是否依赖于仅在执行期间可用的数据输入(例如,Web API的请求数据)

通常,对于可以在应用程序启动时解决的依赖项,可以通过IoC容器注入依赖项。

如果在执行期间需要数据输入,那么通常工厂是正确的方法,您可以在参数中将数据输入提供给工厂方法,并且工厂可以为该组输入返回正确解析的实例。请注意,工厂本身仍应理想地插入IoC容器中。

对于主要数据依赖关系,您可能需要考虑构建器。

对于其他方案,如自定义生命周期,混合功能+数据依赖性等,您可能需要使用更多自定义方法。虽然如果有的话,定制可能更倾向于工厂或建筑商,但也许工厂/建筑商本身仍然使用依赖注入和通过IoC容器解决。