it-swarm.cn

使用依赖注入和IoC容器有什么好处?

我打算就依赖关系注入和IoC容器进行一次演讲,并且正在寻找一些使用它的良好论据。

使用此技术和这些工具的最重要好处是什么?

67
Andy Lowry

对我而言,最重要的是使其易于遵循 单一责任原则

DI/IoC使我可以轻松地管理对象之间的依赖关系。反过来,这使我更容易将一致的功能分解为自己的合同(接口)。结果,自从我了解DI/IoC以来,我的代码已进行了更加模块化。

这样的另一个结果是,我可以更轻松地了解支持 开-闭原理 的设计的过程。这是最令人鼓舞的技术之一(仅次于自动化测试)。我怀疑我是否会足够拥护开放式原则的优点。

DI/IoC是我编程生涯中为数不多的“改变游戏规则”的事情之一。我在学习DI/IoC之前和之后编写的代码之间在质量上有huge差距。让我再强调一点。 [〜#〜]巨大[〜#〜]提高了代码质量。

48
quentin-starin

真正使我大开眼界的示例看到的是,如何轻松地对以这种方式创建的对象进行单元测试。在此之前,我很难尝试隔离对象以进行单元测试。我经常会编写测试来与更大的系统进行交互。这确实很难,因为与单个组件相比,整个系统的可预测性要差得多,并且更容易更改。

9
Winston Ewert

依赖项注入的优点是:

  1. 您的代码干净且可读性强。
  2. 代码是松散耦合的。
  3. 由于实现是在XML文件中配置的,因此具有更高的可重用性,可以在不同的上下文中使用它。
  4. 可以使用不同的模拟实现轻松测试代码。
4
Solaimani SA

我认为实际收益比技术收益更具政治意义。 DI只是Service Locator模式的替代方案,仅此而已。就其本身而言,遵循SRP或OCP之类的原理或分离层并不容易。国际海事组织(IMO)在这里的其他受访者都在混淆不同的概念和技术。

通过使用服务定位器,或者在适用的情况下(大多数时候)直接直接实例化依赖关系,就可以实现高内聚和低耦合的相同目标。

现在,我知道许多人会不同意这种观点。我将很高兴讨论具体示例。

2
Rogério