实际上,大多数框架都替我们考虑了这些问题,这就是为什么我们在框架规范的要求下写出的代码更流畅(至少以前给我的感觉是这样),言归正传。
高内聚、低耦合的定义:
内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。
耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身。
目的:使得模块的“可重用性”、“移植性”大大增强
通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低
对于函数来说:
高内聚:尽可能类的每个成员方法只完成一件事(最大限度的聚合)
低耦合:减少类内部,一个成员方法调用另一个成员方法
对于类来说:
高内聚低耦合:减少类内部,对其他类的调用
对于功能块来说:
高内聚低耦合:减少模块之间的交互复杂度(接口数量,参数数据)
耦合的划分,它们之间的耦合度由高到低排列如下:
(1) 内容耦合:一个模块直接访问另一模块的内容,则称这两个模块为内容耦合。
若在程序中出现下列情况之一,则说明两个模块之间发生了内容耦合:
-
一个模块直接访问另一个模块的内部数据。
-
一个模块不通过正常入口而直接转入到另一个模块的内部。
-
两个模块有一部分代码重叠(该部分代码具有一定的独立功能)。
-
一个模块有多个入口。
内容耦合可能在汇编语言中出现。大多数高级语言都已设计成不允许出现内容耦合。这种耦合的耦合性最强,模块独立性最弱。
(2) 公共耦合:一组模块都访问同一个全局数据结构,则称之为公共耦合。公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。如果模块只是向公共数据环境输入数据,或是只从公共数据环境取出数据,这属于比较松散的公共耦合;如果模块既向公共数据环境输入数据又从公共数据环境取出数据,这属于较紧密的公共耦合。
耦合带来的问题:
代码可维护性差、理解性差、新增功能模块繁琐。
高内聚低耦合的优势:
事实上,短期来看,并没有很明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人员提出了更高的要求。高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会成为业务发展的障碍。