代码编程教学入门 代码怎么编写( 四 )


  1. 一个模块直接访问另一个模块的内部数据 。
  2. 一个模块不通过正常入口而直接转入到另一个模块的内部 。
  3. 两个模块有一部分代码重叠(该部分代码具有一定的独立功能) 。
  4. 一个模块有多个入口 。
3.2 内聚的类型
代码编程教学入门 代码怎么编写


内聚,是描述一个模块内各元素彼此结合的紧密程度,是从功能角度来度量模块内的联系 。
  • 低内聚:模块内的元素的职责相关性低,通常也意味着模块与外部是紧耦合的 。
  • 高内聚:模块内的元素的职责相关性强,通常也意味着模块与外部是松耦合的 。
通常,解决了耦合的问题,就解决了内聚的问题,反之亦然 。
a. 偶然性内聚
偶然内聚,一个模块内的各元素之间没有任何联系,仅是恰好放在同一个模块内,业务的“Util/Helper”类有大量例子 。
  • 问题的原因:通常是模块名起的过于抽象,导致不同职责的元素都可以放进去,从而引起了低内聚 。
  • 问题的解法:将抽象的模块拆解成多个更小的具体模块,例如RetailTradeHelper可以拆为OrderAmountHelper/OrderPaymentParamHelper 。

代码编程教学入门 代码怎么编写


b. 逻辑性内聚
逻辑内聚,把几种相关的功能组合在一起,由调用方传入的参数来确定具体执行哪一种功能 。
逻辑内聚是一种“低内聚”,某程度上对应了“控制耦合”,它把内部的逻辑处理暴露给了接口之外,当内部逻辑发生变更时,原本无辜的调用方也会受牵连改动 。
代码编程教学入门 代码怎么编写


c. 时间性内聚
时间内聚,指一个模块内的组件除了在同一时间都会被执行外,相互之间没有任何关联 。
代码编程教学入门 代码怎么编写


d. 过程性内聚
过程内聚,指一个模块内的组件以特定次序被执行,但相互之间没有数据传递 。
e. 通信性内聚
通信内聚,指一个模块内的组件以特定次序被执行,且相互之间传递和操作相同的数据 。
代码编程教学入门 代码怎么编写


f. 顺序性内聚
顺序内聚,指一个模块内的元素以特定次序被执行,且上一步的输出被下一元素所依赖 。
代码编程教学入门 代码怎么编写


g. 功能性内聚
功能内聚,指一个模块内所有组件属于一个整体,完成同一个不可切分的功能,彼此缺一不可 。
四、设计原则
设计原则,是指导我们如何设计出低耦合、高内聚的代码,让代码能够更好的应对变化,从而降本提效 。
设计原则的关键,是从使用方的角度看提供方的设计,一句话概括就是:请不要要我知道太多,你可以改,但请不要影响我 。
4.1 单一职责原则(SRP)
定义:一个函数/类只能因为一个理由被修改 。
单一职责原则,是所有原则中看起来最容易理解的,但是真正做到并不简单 。因为遵循这一原则最关键是职责的划分 。
职责的划分至少要回答两个基本问题:
  • 什么是你,什么是我?
  • 什么事情归你管,什么事情归我管?
且不说写代码,工作中我们也会出现人人不管或相争的重叠地带,划分清楚职责看起容易,实际很难 。
4.2 开闭原则(OCP)
定义:对扩展开放,对修改关闭(不修改代码就可以增加新功能) 。
要理解开闭原则,关键是要理解定义中隐含着的两个主语,“使用方”和“提供方”,即:

推荐阅读