我正在阅读关于依赖倒置和解耦的理论,我看不出两者之间的区别 .
Dependency inversion 讨论了解耦功能组件,以便更高级别的组件不依赖于更低级别的组件 .
Decoupling 谈论同样的事情以及如何实现它 . 但是我们的IoC容器会让事情变得更糟 . 为什么它们不是称为依赖性反转容器或更好的依赖注入容器,因为它们服务于独立组件的运行时耦合?
然后我们有 Inversion of Control . 它与 Dependency Inversion 基本相同,不是吗?为什么有三个术语描述同一个东西?还是我失明了?
-
三者有什么区别?
-
IoC在IoC容器中需要做什么?
3 回答
Decoupling 是适用于许多领域的非常一般的原则 . Dependency inversion 是一种特定的解耦形式,您可以将系统的较高级别与较低级别分离,将它们分离为库并使用接口 . 这使您可以在不进行重大返工的情况下更换系统的较低级别部件 .
例如,不是系统的更高级别部分创建更低级别类的具体实例,而是可以使用IoC容器来分离对象的创建方式 .
Inversion of control 是框架库使用的设计原则,允许框架从应用程序中重新获得某些控制 . 即,当某些用户界面事件发生时,窗口框架可以回调到应用程序代码中 . 马丁福勒使用“好莱坞原则”这个词,就像唐't call us, we'中给你打电话一样 . 解耦是控制反转的重要部分 .
但是有什么与控制反转有关? To quote Martin Fowler:
(请注意,Martin Fowler讨论了依赖注入,而不是依赖反转 . )
IoC容器有助于实现依赖注入,也许更好的术语是依赖注入容器 . 但是,IoC容器名称似乎坚持下去 . 依赖注入是依赖性反转的一个重要组成部分,但使用IoC容器进行依赖注入可能会令人困惑,因为控制反转是一个更广泛和更通用的原则 .
你指出命名不是很一致,但这不应该是一个大惊喜,因为这些术语即使重叠也是独立发明和使用的 .
Dependency Injection 使用 Inversion of Control 达到 Decoupling .
我从martinfowler.com上的文章中找到以下解释直接理解(这里DI =依赖注入,DIP =依赖性反转原理,IoC =控制反转):