依赖性反转涉及解耦功能组件,使得较高级别组件不依赖于较低级别组件。
解耦谈论同样的事情和如何实现它。但是,我们有IoC容器,进一步混乱。为什么他们不是称为依赖反转容器或更好的依赖注入容器,因为它们为独立组件的运行时耦合提供服务?
然后我们有反转控制。它基本上是相同的事情,依赖性反转不是吗?为什么有三个术语描述同样的事情?还是我盲目?
>三者之间有什么区别?@H_404_8@> IoC在IoC容器中需要做什么?
例如,代替系统的较高级别部分创建较低级别类的具体实例,可以使用IoC容器来解耦如何创建对象。
控制反转是框架库使用的设计原则,允许框架从应用程序重新获得一些控制。即,当某些用户界面事件发生时,窗口化框架可以回调到应用代码中。马丁福勒使用“好莱坞原则”一词,不要打电话给我们,我们会打电话给你。去耦是控制反演的重要部分。
但是什么有IoC容器与反转控制有关? To quote Martin Fowler:
Inversion of Control is too generic a term,and thus people find it confusing. As a result with a lot of discussion with varIoUs IoC advocates we settled on the name Dependency Injection.
(注意,Martin Fowler谈到依赖注入,而不是依赖反转。)
IoC容器有助于实现依赖注入,也许一个更好的术语是依赖注入容器。然而,IoC容器名称似乎坚持。依赖注入是依赖反转中的一个重要组件,但是使用IoC容器进行依赖注入可能会令人困惑,因为控制反转是一个更宽泛和更通用的原则。
你指出,命名不是很一致,但这不应该是一个大惊喜,因为这些术语已独立发明和使用,即使它们重叠。