首页/开发/系统分析与架构设计速查/内聚(Cohesion)与其等级
架构风格与模式58 条

内聚(Cohesion)与其等级

内聚衡量模块内部元素的相关程度,从偶然、逻辑、时间、过程、通信、顺序到功能内聚逐级增强;模块设计以功能内聚为目标。

内聚是什么

内聚衡量模块内部各元素之间的相关程度,是模块设计的核心指标之一。从弱到强大致分为:偶然内聚(元素之间没有实质关系)、逻辑内聚(按类别把选择逻辑打包)、时间内聚(同一时间执行)、过程内聚(按执行顺序)、通信内聚(操作同一份数据)、顺序内聚(前一步输出是后一步输入)、功能内聚(所有元素共同完成单一功能)。设计目标是把模块做成一件事,而不是把「看起来都是工具类方法」的东西凑在一起。

基本信息

衡量对象单个模块或类内部的元素相关性
最强形态功能内聚:所有元素共同服务一个明确职责
最弱形态偶然内聚:元素之间没有实质关系,只是被放在一起
判断方法试着用一句话描述模块职责,说不清说明内聚偏低
配套指标内聚与耦合要一起看:高内聚低耦合才是可用目标

典型使用场景

  • 模块拆分评审:用职责描述检验拆分后的模块是否各自聚焦
  • 工具类治理:把不断膨胀的 Utils 按变化原因重新拆分
  • 服务边界设计:把同一业务能力的逻辑收拢到一处
  • 重构排期:识别内聚偏低的热点文件并排入治理计划
  • 代码评审:新增方法前先问它是否属于该模块的职责
  • 包结构设计:按业务能力组织模块,避免按技术类型平铺

内聚等级

等级含义示例
功能内聚所有元素共同完成单一功能金额计算模块
顺序内聚上一步输出是下一步输入先解析再校验的处理链
通信内聚多个操作作用于同一份数据同时读写同一订单结构
逻辑内聚按类别打包的选择逻辑各种格式导出的函数集合
偶然内聚元素之间没有实质关系杂项方法堆成的工具类

拆分判断要点

拆分判断要点
# 1 一句话职责:能否用一句话说清模块做什么,说不清就该拆
# 2 变化原因:变更是否总是一起发生,总一起变才适合放在同一模块
# 3 命名检验:名字里出现 And、Utils、Common、Helper 时,检查是否偶然内聚
# 4 依赖方向:拆分后模块间调用关系是否更简单,而不是引入更多跳转
# 5 反例警示:为提升内聚而强行拆成极小的模块,会让调用链与样板代码膨胀
# 6 复查节奏:模块随业务演进会再次失焦,定期用职责描述重新对照
内聚低通常伴随「工具类」不断膨胀:按变化原因把方法重新分组,比继续往同一个类里加方法更有长期价值。
内聚不是越高越好:过度拆分会让模块间调用关系变复杂,判断标准是拆分后整体是否更容易理解与修改。

易错点

  • 把无关方法集中到 Utils 类:内聚降至偶然级,任何改动都可能影响多处
  • 为提升内聚强行拆分:模块间调用关系与服务数量反而更复杂
  • 按技术层平铺模块:同一业务规则散落多处,改动仍需全链路联调
  • 只关注内聚不看耦合:模块内部聚焦了,外部依赖网却更密集
  • 新增方法不检查归属:模块职责随需求漂移,最终无人能说清它做什么

数据来源与参考

  • Constantine & Yourdon 结构化设计著作(1970s)
  • 《软件架构:架构模式、特征及实践指南》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌