依赖注入 – “控制反转”,“依赖反转”和“解耦”之间的差异

我读了关于依赖反演和解耦的理论,我看不出两者之间的区别。

依赖性反转涉及解耦功能组件,使得较高级别组件不依赖于较低级别组件。

解耦谈论同样的事情和如何实现它。但是,我们有IoC容器,进一步混乱。为什么他们不是称为依赖反转容器或更好的依赖注入容器,因为它们为独立组件的运行时耦合提供服务?

然后我们有反转控制。它基本上是相同的事情,依赖性反转不是吗?为什么有三个术语描述同样的事情?还是我盲目?

>三者之间有什么区别?
> 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容器进行依赖注入可能会令人困惑,因为控制反转是一个更宽泛和更通用的原则。

你指出,命名不是很一致,但这不应该是一个大惊喜,因为这些术语已独立发明和使用,即使它们重叠。

http://stackoverflow.com/questions/3912504/difference-between-inversion-of-control-dependency-inversion-and-decouplin

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:依赖注入 – “控制反转”,“依赖反转”和“解耦”之间的差异