我一直在阅读依赖注入,并且我理解如何在XML中指定依赖关系的吸引力,就像在许多框架中所做的那样。我在一个大型系统上工作,在这个系统中,我们通常会调用工厂来获取具体对象,并且正在努力理解为什么手动注入的依赖项为什么in this Wikipedia article被认为更好。为什么依赖注入比使用工厂更好?
在我看来,调用一个工厂是更好,因为:
- 调用代码不需要知道或关心一个特定的依赖关系存在。
- 调用代码并不需要改变,如果新的依赖被添加到被叫方。
- 调用代码并不需要有专门为选择具体的实例来注入任何逻辑。
在我看来,这种依赖注入仅提供好处,当调用代码有决定对依赖具体的类。几乎就像“这是我的数据,现在处理它。”
有什么我错过了什么?
更新: 澄清,我们现有的代码主要是直接调用工厂。因此,要获得一个新的球对象,你会看到这样的代码:
Ball myBall = BallFactory.getObject();
很多的工厂都实现以允许新的具体对象类型的运行时间登记 - 一个插件框架。
所以在看一些看起来像DI的初步意见后,我调用的代码通常不会传中,球对象,而是将BallFactory。我想这样做的好处是,类可能更通用,因为它甚至没有耦合到它使用的工厂。
您是否将那些工厂作为参数传递给需要的对象?那就是*依赖注入*。 – deceze 2012-08-17 13:57:19
你是在谈论工厂类还是静态工厂方法?无论如何,工厂是你通常如何实现依赖注入。 – 2012-08-17 14:28:50
依赖注入为您的工作,为你,不用你。这就是原因(假设你正在使用依赖注入框架)。 – 2012-08-17 15:30:50