我一直在阅读依赖注入,并且我理解在 XML 中指定依赖项的吸引力,就像在许多框架中所做的那样。我在一个大型系统上工作,我们通常调用工厂来获取具体对象,并且正在努力理解为什么如这篇 Wikipedia 文章中所示的手动注入依赖项据说会更好。
在我看来,调用工厂更好,因为:
- 调用代码不需要知道或关心是否存在特定的依赖项。
- 如果向被调用者添加了新的依赖项,则调用代码不需要更改。
- 调用代码不需要任何专门用于选择要注入的具体实例的逻辑。
在我看来,依赖注入仅在调用代码必须决定依赖的具体类时才提供好处。几乎就像“这是我的数据,现在处理它”。
有什么我错过的吗?
更新: 为了澄清,我们现有的代码大多直接调用工厂。所以要获得一个新的 Ball 对象,你会看到如下代码:
Ball myBall = BallFactory.getObject();
许多这些工厂被实现为允许新的具体对象类型的运行时注册 - 一个插件框架。
因此,在查看了一些初始注释之后,似乎使用 DI 我的调用代码通常不会传入 Ball 对象,而是传入 BallFactory。我想这样做的好处是该类可能更通用,因为它甚至没有与它使用的工厂耦合。