名词解释

依赖:一种模型元素之间的关系的描述。例如类A调用了类B,那么我们说类A依赖于类B。

耦合:一种模型元素之间的关系的描述。例如类A调用了类B或类B调用了类A,那么我们说类A与类B有耦合关系。

耦合度:模型元素之间的依赖程度的量化描述。

控制:一种模型元素之间的关系的描述。例如类A调用了类B,那么我们说类A控制类B。

绪论

架构设计的对象一般是类库、框架和应用程序。其工作任务除了类库、框架、应用程序各个模块(类)之间的关系设计之外,还包括类库、框架和应用程序三者之间关系的设计。而依赖倒置、控制反转、依赖注入正是常用的一类设计模式。

依赖倒置、控制反转、依赖注入三者含义和目标基本一致,即通过抽象接口解耦和消除依赖关系。

依赖倒置

从字面理解依赖倒置往往不知所云,通过了解其历史渊源可以很好的消除这种误解。在面向结构编程时代,架构设计师往往采用自上而下的设计模式,先设计上层模块,再设计下层模块,如此层层分解,导致上层模块严重依赖于下层模块,下层模块的一点变化都会导致上层地震。到了面向对象编程时代,架构设计师使用对象进行设计,通过抽象接口解耦各层之间的依赖关系,为了与面向结构的设计模式区分开,同时体现面向对象的优势,也为了哗众取宠,就给这种新的设计模式起了个依赖倒置的名称。

依赖倒置的核心思想是依赖于抽象。

依赖倒置的原则是上层模块不依赖于下层模块,而是依赖于一套抽象接口,上层模块调用接口,下层模块实现接口。以类库和应用程序为例,我们把应用程序需要调用的功能抽象为一组接口,然后由类库实现这组接口,那么应用程序就可以使用任意实现了该接口的类库,从而和类库解耦。

控制反转

控制反转的来历与依赖倒置相似,以前设计应用程序,虽然会引用类库,但一切都在应用程序的控制之中。后来根据应用程序的不同场景,人们设计了相应的框架,有了框架之后,再设计应用程序时,就变成了为框架增加自定义行为的设计,控制权转到了框架手里,因此说控制权反转了。

控制反转是依赖倒置的一种具体实现,强调的是控制流程的依赖倒置,是框架设计的必用模式。框架基于依赖倒置模式设计:对于框架中不确定的部分,框架抽象出一组接口,并依赖于这组接口进行实现,应用程序实现这组接口。

依赖注入

依赖注入也是依赖倒置的一种具体实现,是类库设计的一种常用模式。类库中的类基于依赖模式设计:某类依赖于接口,而不是具体的实现,由调用者在调用时传入这些接口的具体实现类。

.Net中广泛使用此模式,比如StreamReader类,当使用StreamReader时,需要实例化一个Stream或其派生类,传给StreamReader的构造函数,然后方能使用该类的方法。

弊病

依赖倒置的基础是假设抽象是稳定的。对于我们已经了解的事物,当然可以实现很好的抽象,但对于尚未认识清楚的事物,比如用户需求,就很难保证这个抽象的稳定性。因此一旦这个抽象稳定的假设不成立,那么依赖倒置不但不能发挥优势,反倒可能成为包袱。

【转载】http://www.cnblogs.com/luckdv/archive/2011/07/21/2112767.html

转载于:https://www.cnblogs.com/julin-peng/p/5434099.html

架构设计之依赖倒置、控制反转与依赖注入相关推荐

  1. 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程...

    那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰--依赖倒置•控制反转•依赖注入•面向接口编程.也 ...

  2. 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程【转】...

    那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰.也许时至今日,你仍对它们一知半解.不过就在今天, ...

  3. 高深术语——依赖倒置•控制反转•依赖注入•面向接口编程

    今天,我将带领你以一种全新的高清视角进入奇妙的编程世界,领略涵泳在这些"高深术语"中的活泼泼的地气,以及翩跹于青萍之末的云水禅心. 高聚合·低耦合 简短:管理好自己(内聚),但是有 ...

  4. 【转】那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程

    作者:在好 链接:https://www.zhihu.com/question/31021366/answer/102239756 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  5. Software--IoC 依赖倒置 控制反转

    软件开发设计原则 S.O.L.I.D 中的 Idependence Convert 转载于:https://www.cnblogs.com/masterSoul/p/7849519.html

  6. 依赖倒置、控制反转、依赖注入

    实现依赖倒置.控制反转.依赖注入的核心思想是:接口驱动 接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性,实现模块之间的解耦等等. 参考资料:https://www.cnblogs ...

  7. php程序设计依赖注入_PHP控制反转和依赖注入

    [TOC] PHP和依赖注入 理论知识 要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversio ...

  8. 一篇文章讲透控制反转和依赖注入

    https://www.jianshu.com/p/07af9dbbbc4b 转载链接:http://blog.xiaohansong.com/2015/10/21/IoC-and-DI/# http ...

  9. Spring控制反转和依赖注入的好处

    要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle ). 什么是依赖 ...

最新文章

  1. poj 1523(无向联通图的割点)
  2. 最新安卓系统细节曝光:后盖手势控制、浮雕式UI、隐私保护.....本月更新!
  3. 洛谷 5205 【模板】多项式开根
  4. 对于PHP大型开发框架的看法
  5. 214. Shortest Palindrome
  6. s7200cpu224xp手册_西门子S7-200CPU224XP
  7. 怎样关闭vivo的HTML查看器,vivo安全模式在哪儿关闭?
  8. 软件工程参考文献精品文献汇总
  9. (亲测有效).net framework 在计算机上已安装了更高的 4.x 版本,则无法安装以前的 4.5 版本。
  10. 首次 golang爬虫插件gocolly/colly 使用经历
  11. iOS 在CollectionView上做展开收起动画
  12. 深度学习入门(九)——深度学习框架概览
  13. python集合的并交差操作
  14. Mybatis学习教程②
  15. 富文本带图片导出word
  16. 是时候搞清楚煎饼大妈的真实收入了!来看看专业的研究流程
  17. Canonical Coin Systems
  18. 【瑞模网】3dmax渲染完就卡住不动,渲染崩溃是怎么回事?
  19. 基于FFMPEG水印添加---avfilter库
  20. 图像处理: 无损地旋转图像

热门文章

  1. springboot 引入jdbc驱动_Spring Boot:企业常用的 Starter以及实现
  2. 转元组 python_Python基础教程,第三讲,列表和元组
  3. Python之try except异常处理工作机制和案例解析
  4. 中国水闸橡胶密封件市场需求状况与营销模式建议报告2022年
  5. 全球与中国人脸语音生物识别市场”十四“五规模状况与前景趋势分析报告2021-2027年版
  6. CryptoAPI与openssl数字签名与验证交互
  7. Java常用正则表达式
  8. Python3 文件读写
  9. xtraback工具的使用和备份
  10. 组件中props参数的应用