去耦是适用于许多领域的非常普遍的原则。依赖关系反转 是一种特殊的解耦形式,您可以通过将系统的较高级别与较低级别分离开来,方法是将它们分离为库并使用接口。这使您无需进行大量返工即可替换系统的较低层部分。
例如,可以使用IoC容器解耦如何创建对象,而不是使用系统的高层部分来创建较低层类的具体实例。
控制反转是框架库使用的一种设计原理,它允许框架从应用程序中重新获得某些控制权。即,当某些用户界面事件发生时,窗口框架可以回调应用程序代码。马丁·福勒(Martin Fowler)使用好莱坞原则一词,因为“不要打电话给我们,我们会打电话给您”。去耦是控制反转的重要部分。
但是,IoC容器与控制反转有什么关系?引用马丁·福勒(Martin Fowler)的话:
控制反转是一个过于笼统的术语,因此人们会感到困惑。经过与各种IoC倡导者的大量讨论,我们决定使用依赖注入这个名称。
(请注意,Martin Fowler谈论的是依赖注入,而不是依赖反转。)
IoC容器有助于实现依赖项注入,也许更好的术语是依赖项注入容器。但是,IoC容器名称似乎很固定。依赖注入是依赖关系反转中的重要组成部分,但是将IoC容器用于依赖关系注入会造成混淆,因为控制反转是更广泛,更通用的原理。
您指出命名并不十分一致,但这应该不足为奇,因为这些术语是相互独立发明和使用的,即使它们相互重叠。