采访者问道:“依赖注入的价值是什么?”

时间:2011-10-16 17:48:31

标签: dependency-injection

  

可能重复:
  What is dependency injection?

我回答:“您不需要使用new运算符。”

访员回复:“<SIGH>。就是这样吗?”

这就是我想到的一切。

如果不正确,会有什么更正确的答案?

4 个答案:

答案 0 :(得分:6)

它将组件与其外部依赖项(例如其他库,数据库等)分离,允许您轻松更改它们 - 即使在运行时也是如此。

这可以(例如)在自动化测试中很有用,因为您可以通过公共API注入mock objects

答案 1 :(得分:3)

依赖注入将类与它们所依赖的服务分离,允许您注册一组服务并在整个代码库中使用它们。

这允许您以非侵入方式切换实现,尤其是在实现经过单元测试的情况下。

它还允许您针对不同的用例(例如Web与GUI与测试)使用相同的类来实现不同的服务实现。

答案 2 :(得分:2)

维基百科文章是一个很好的参考:http://en.wikipedia.org/wiki/Dependency_injection

主要是,它减少了耦合并简化了测试。你可以通过喂它一个模拟而不是真正的类来方便地对该类进行单元测试。在面试中这是一个很好的问题,看看候选人是否熟悉TDD良好实践。

答案 3 :(得分:2)

不要考虑“依赖注入”这个词,而应该考虑“工厂清单”。要使用现实世界的例子,请考虑一个拥有数千种不同产品的目录供应公司。它希望使用一种通用方案将对象保留在库存中,并在空时对其进行重新排序。如果每个产品都有自己独立的订购方式,就很难开展这样的业务,并且必须有一个人知道如何订购每件产品。然而,这不是企业运营的方式。相反,将有一个文件,其中包含每个产品订购所需的信息和过程。许多产品会使用相同的程序,但是一些产品可能需要特殊的程序(例如,下午2点到下午3点之间致电815-555-6666,询问史蒂夫,并要求他提供带蓝色端盖的小部件,因为该公司通常会穿上黄色封顶)。

将依赖注入视为能够在产品类型列表中包含采购指令。想想目录公司能够以这种能力运作的顺利程度,以及拥有任何规模的公司在没有它的情况下会有多么尴尬。

PS - “依赖注入”,如“资源分配是初始化”,是一个我不喜欢的短语,因为它的实际意义与构成它的单词没什么关系。 DI的大多数用途似乎与“依赖”无关,也与“注入”任何东西无关。我认为“工厂清单”是一个更长的词(但是更短的音节)并且更好地传达了意义。顺便说一句,对于RIAA,我将替换“对象生命周期匹配对象范围”。