软件模块设计质量之内聚
文章目录
- 前言
- 一、内聚是什么?
- 二、内聚的7种类型(从低到高)
- 1.偶然内聚(Coincidental Cohesion)
- 2.逻辑内聚(Logical Cohesion)
- 3.时间内聚(Temporal Cohesion)
- 4.过程内聚(Procedural Cohesion)
- 5.通信内聚(Communicational Cohesion)
- 6.顺序内聚(Sequential Cohesion
- 7.功能内聚(Functional Cohesion)
- 总结
前言
在模块化软件设计中,衡量一个模块设计质量的重要指标之一便是内聚性(Cohesion)。高内聚的模块往往具有明确的职责边界、紧密的内部逻辑以及良好的可维护性和可重用性。随着软件规模和复杂度的增长,合理划分模块、提升内聚性已成为提高软件质量、降低维护成本的关键手段。
内聚可分为多个层次,从最差的偶然内聚到最理想的功能内聚,每种类型都体现了模块内部组成元素之间的结合程度及其合理性。深入理解各种内聚类型的特点、适用场景以及它们在实际开发中的表现,有助于我们在架构设计和代码重构过程中作出更加科学的判断与优化。
一、内聚是什么?
“内聚”是衡量软件设计中模块内部各个元素彼此关联程度的重要指标,内聚度越高,模块内部功能越专一、职责越明确,模块的可维护性、可重用性就越好。
二、内聚的7种类型(从低到高)
1.偶然内聚(Coincidental Cohesion)
- 描述: 模块内部多个任务之间没有逻辑关联,只是偶然放在一起。
- 内聚程度:最低 ❌
- 例子:一个模块中有打印日志、计算总和、发送邮件等毫无关联的功能。
2.逻辑内聚(Logical Cohesion)
- 描述:模块执行一类相似的功能,通过参数决定具体执行哪一个。
- 内聚程度:最低 ❌
- 例子:如一个模块根据传入标志执行不同操作(打印/排序/写文件等)。
3.时间内聚(Temporal Cohesion)
- 描述:模块中操作需要在相同时间段执行(如启动或关闭时)。
- 内聚程度:最低 ❌
- 例子:初始化模块:打开文件、读配置、启动服务等放在一起。
4.过程内聚(Procedural Cohesion)
- 描述:模块中任务按照特定顺序执行,彼此有关联但功能不一致。
- 内聚程度:最低 ❌
- 例子:先验证用户,再写日志,再跳转页面。
5.通信内聚(Communicational Cohesion)
- 描述:模块内操作使用相同的数据结构。
- 内聚程度:中等 ✅
- 例子:对同一数据表进行查询、统计、修改。
6.顺序内聚(Sequential Cohesion
- 描述:模块的一个输出作为另一个操作的输入。
- 内聚程度:较高 ✅
- 例子:读取数据 → 处理数据 → 输出结果。
7.功能内聚(Functional Cohesion)
- 描述:模块完成单一、明确的功能,内部操作紧密协作完成这个功能。
- 内聚程度:最高 ✅✅
- 例子:纯粹实现一个功能,如只做“计算税额”。
总结
内聚性是评价模块设计优劣的重要维度之一。通过对偶然内聚、逻辑内聚、时间内聚、功能内聚等常见类型的对比分析,我们可以看出:
-
偶然内聚和逻辑内聚结构松散,应尽量避免;
-
时间内聚和过程内聚虽然有一定逻辑,但职责仍不够单一;
-
通信内聚和顺序内聚已具备一定结构性,是可接受的设计;
-
功能内聚作为最高级别,强调模块应只做一件事,追求最小职责单元,是高质量模块设计的目标。
在实际开发中,我们应尽量设计高内聚、低耦合的模块体系,以提升系统的可维护性、可测试性和可扩展性。