阅读本文时,请注意软件术语均在括号内用红色标注

高内聚与松耦合,通俗的说就是我国的一句古话:各人自扫门前雪,莫管他人瓦上霜。

我来解释一下,假设你是“面向对象”(面向对象oop)小区的一个居民你的名字叫做“类”(类),你不仅可以把自己门前雪扫干净,还可以帮别人家把雪扫干净。

其一,你会不会觉得自己的活干的有点多(这时你就成了传说中的“上帝对象”,一个类把活全干了)。

其二,如果你要帮助别人家扫雪,要和各家各户协商,最后要合理分配扫雪时间,安排顺序,遇到突发问题时说不定你还要处理夫妻的感情纠纷呢,我相信你会遇到各式各样的问题。原本都与扫雪工作本身无关的工作被引入进来(类的工作很多,并且互不相关,这叫低内聚)。

其三,如果有人搬出了小区(类的删除),或者又有人搬进了小区(类的增加),再或者有人改造了自己院子(类改变)。这些改变(软件需求的变更)你无法预期,那只能动态的适应,现在事情更复杂了。(任何一个类的变化都会影响到你,真是改来改去呀)。

其四,如果你想修改下关于扫雪的一些事宜,全小区的居民都要跟你重新协商扫雪事宜,说不定那户居民就跟你闹矛盾呢。(你的修改导致很多类同样需要修改,bug也随之而生)。

其五,如果你有一天生病了,可能是干活太累了(一个类庞大且复杂难免不出现问题),那其他人怎么办呢?平时都是你负责的,你走了没人负责。你一生病全小区的雪都没人扫了,小区彻底瘫痪了。

想到了吗?这就是低内聚和紧耦合的弊病呀!

那么如果是高内聚,低耦合呢,不就是每个人各司其职,每个人都是自己能做的事情自己做,谁也不需要谁的帮助(减少互相依赖,松耦合),安下心来把自己事情安排合理(整合任务,高内聚)。

总之一句话,各人自扫门前雪,莫管他人瓦上霜

浅谈高内聚与松耦合,各人自扫门前雪,莫管他人瓦上霜相关推荐

  1. 浅谈“高内聚,低耦合”

    浅谈"高内聚,低耦合" 高内聚,低耦合官方概念:在软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分模块的一个准则是高内聚低耦合.从模块粒度来看,高内聚:尽可能类的每个 ...

  2. 迪米特法则实现“高内聚、松耦合”

    什么是"高内聚.松耦合"? 如何利用迪米特法则来实现"高内聚.松耦合"? 有哪些代码设计是明显违背迪米特法则的?对此又该如何重构? 何为"高内聚.松耦 ...

  3. 【设计模式之美 设计原则与思想:设计原则】22 | 理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”?

    今天,我们讲最后一个设计原则:迪米特法则.尽管它不像 SOLID.KISS.DRY 原则那样,人尽皆知,但它却非常实用.利用这个原则,能够帮我们实现代码的"高内聚.松耦合".今天, ...

  4. 如何用迪米特法则(LOD)实现“高内聚、松耦合”?

    什么是"高内聚.松耦合"? 如何利用迪米特法则来实现"高内聚.松耦合"? 有哪些代码设计是明显违背迪米特法则的?对此又该如何重构? 何为"高内聚.松耦 ...

  5. 【设计模式】理解高内聚、松耦合

    "高内聚.松耦合"是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围.很多设计原则都以实现代码的"高内聚.松耦合"为 ...

  6. 【Java设计模式 规范与重构】 三 大型重构的手段:高内聚,低耦合

    之前通过两篇Blog了解了重构的目的.内容.时机.方法.保障,了解了持续重构的重要性和好处,知道了单元测试对于重构代码的保障作用,同时明确小范围重构依照规范随时进行,而大型重构需要分层.模块化.解耦. ...

  7. 多模块顺序_软件架构基础 3: 什么是好的模块化代码?高内聚、低耦合如何衡量?...

    0. 写在前面 什么是好的代码?好的代码应该模块化. 王垠在其<编程的智慧>中也提到,要"写模块化的代码".(不对人做评价,这篇文章写得是非常好的.) 如果你读过< ...

  8. java中的高内聚和低耦合和接口的简单理解

    ## *浅谈java编程语言中高内聚和低耦合**先说低耦合中一个例子: 假设你的一个web应用包含50个函数<或者说方法> 你改动一个函数,其他函数正常运行工作...这就是低耦合.高内聚: ...

  9. 高内聚、低耦合的含义是什么?

    对于开发者而言,耦合原则表示程序中单个的模块应该尽可能的独立. 处理一个模块时,不应该依赖另一个模块的内部工作. 内聚原则是指,在一个给定的模块内部,所有的代码应该只完成一个单个的目标. IT界有一句 ...

最新文章

  1. Kirito 的博客崩了,这次是因为...
  2. 增强的Internet域内网关路由协议
  3. cocos2d Labels and Fonts 标签和字体(附:关于Hiero的二三事)
  4. JavaScript中的数组遍历forEach()与map()方法以及兼容写法
  5. Win10环境下,word2016嵌入mathtype出现灰色的解决办法
  6. python 可视化饼图_Python可视化学习(饼状图,坐标系...)
  7. 区块链系列教程之:比特币的世界
  8. python web框架对比_Python六大开源框架对比
  9. (140)System Verilog替代交叉覆盖率
  10. Filezilla软件
  11. WebApi系列(从.Net FrameWork 到 .Net Core)
  12. 全国各地 DNS 服务器 IP 总汇
  13. java创建容器对象的类是什么_spring容器创建bean对象的方式
  14. 概率论复习笔记一——伯努利实验及相关的概率分布
  15. 【CVPR2021】OCR文本检测MOST解读
  16. golang中零停机重启服务之套接字复用,endless
  17. 100 bugs in Open Source C/C++ projects
  18. 深度学习模块介绍 —— Hourglass Module
  19. 爱因斯坦广义相对论: 质量/能量物体是如何影响时空的?
  20. 笔记本html外接显示器,提升效率 笔记本外接显示器(Intel篇)

热门文章

  1. 【一步一步学习VBA】Excel VBA 读取txt文件并写入Excel单元格(友好版)
  2. Photo2Cartoon,照片图片批量转漫画
  3. mysql upgrade 是什么意思_Upgrade是什么意思?
  4. MOOS-ivp 实验九 分布式旅行商问题(1)
  5. VVC/JEM代码学习26:m_pcTrQuant-transformN*N
  6. matlab零序五次谐波,基于5次谐波的小电流接地系统故障选线方法仿真与分析.docx...
  7. 任务卡_05-数据库_数据库基础
  8. 贪玩蓝月-大漠模拟脚本源码
  9. ubuntu18安装
  10. 俄油与中石油达成为期10年的协议;苏伊士完成股东联合体收购,苏冰岚履职首席执行官 | 能动...