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