下面按从高到低逐一解释这七种内聚类型。判断内聚高低的核心标准是模块内部各成分之间是“为什么”联系在一起——是因为共同完成一个单一功能还是仅仅因为碰巧放在一起。1. 功能内聚Functional Cohesion——最高定义模块内所有成分共同协作完成一个单一、明确的功能缺一不可。特点模块只有一个功能目标所有语句都为这个目标服务各部分联系最紧密职责最单一模块独立性最好最易理解、测试、复用和维护。示例一个calculateTax()模块只负责计算税额一个sortArray()模块只负责排序。判断如果去掉任何一部分功能就不完整如果只保留一部分功能也无法独立成立。2. 顺序内聚Sequential Cohesion定义模块内各成分按顺序执行前一部分的输出是后一部分的输入共同完成一个较大功能。特点成分之间有数据依赖必须按顺序执行比功能内聚稍弱因为模块承担了多个步骤但步骤间联系紧密通常可以进一步拆分但拆开后需要传递数据。示例一个模块先读取文件再解析内容最后输出结果getAndValidateUser()先查询用户再校验用户状态。判断前一步的输出直接作为后一步的输入形成流水线。3. 通信内聚Communication Cohesion定义模块内各成分操作同一组数据但彼此执行顺序不一定固定也不一定有输入输出关系。特点成分之间通过共享同一数据结构联系在一起比顺序内聚弱因为各成分可以独立执行只是数据相同常见于对同一记录进行多种操作。示例一个模块对同一个学生记录分别执行计算平均分、打印成绩单、更新排名一个模块对同一个订单对象执行计算总价、计算税费、生成发票。判断大家围绕“同一份数据”工作但彼此不一定是前后依赖。4. 过程内聚Procedural Cohesion定义模块内各成分必须按特定顺序执行但彼此之间没有数据传递只是控制流程要求它们按次序进行。特点强调“执行顺序”而不是数据依赖比通信内聚弱因为成分之间联系只是流程上的常见于初始化、清理等过程。示例一个模块依次执行打开日志文件、初始化配置、启动服务一个模块依次执行关闭连接、释放内存、写结束日志。判断必须按顺序做但前一步的结果不一定是后一步的输入。5. 时间内聚Temporal Cohesion定义模块内各成分因为需要在同一时间段内执行而被放在一起彼此功能上不一定相关。特点联系点是“时间”不是功能、数据或流程比过程内聚弱因为顺序可能不严格成分之间逻辑关系松散典型是初始化模块、异常处理模块。示例系统启动模块初始化变量、打开文件、加载配置、启动定时器系统关闭模块保存状态、关闭文件、释放资源、写日志。判断它们“都在系统启动时做”但彼此不一定有直接关系。6. 逻辑内聚Logical Cohesion定义模块内各成分在逻辑上属于同一类操作通过参数选择执行其中某一部分但每次只执行其中一条逻辑分支。特点成分之间只是“类别相同”实际执行时通常只选一个比时间内聚弱因为模块内部包含多条互斥逻辑模块接口复杂调用者需知道传什么参数容易产生耦合。示例一个output(data, type)模块根据type决定输出到屏幕、打印机或文件一个handleError(code)模块根据错误码执行不同处理。判断它们“都属于输出/错误处理这一类”但具体逻辑彼此独立。7. 偶然内聚Coincidental Cohesion——最低定义模块内各成分之间没有任何实质性联系只是碰巧被放在同一个模块里。特点内聚最低模块内部杂乱无章难以理解、测试、维护和复用修改一处可能影响其他无关部分。示例一个工具模块里同时放了计算平方根、打印欢迎语、打开数据库连接一个utils模块里塞了各种互不相关的小函数。判断问“为什么这些代码在一起”答案是“没什么原因就放一起了”。总结对比内聚类型联系纽带强弱一句话理解功能内聚共同完成单一功能最高只做一件事顺序内聚输出→输入顺序依赖高流水线前后工序通信内聚操作同一组数据较高围绕同一份数据干活过程内聚必须按固定顺序执行中按流程排队但无数据传递时间内聚同一时间段执行较低都在启动/关闭时做逻辑内聚逻辑上同类参数选择低一类操作塞进一个模块偶然内聚无实质联系最低碰巧放在一起记忆口诀功顺通过时逻偶——功能 顺序 通信 过程 时间 逻辑 偶然。设计时应尽量追求功能内聚和顺序内聚避免逻辑内聚和偶然内聚通信内聚和过程内聚可作为折中时间内聚要谨慎使用。
阅读完成 · 觉得有帮助?