type
status
date
slug
summary
tags
category
icon
password
一、高内聚(模块内部专注做一件事)
1. 功能内聚
例子:一个「加法计算器」函数,只负责两数相加,不处理减法或乘法。
2. 顺序内聚
例子:一个「咖啡机」模块,流程严格按顺序执行:
- 磨咖啡豆 → 2. 烧开水 → 3. 冲泡咖啡。 每一步的输出是下一步的输入(比如磨好的豆子传给冲泡步骤)。
3. 通信内聚
例子:一个「用户信息处理」模块,所有函数都操作同一份用户数据:
update_user_name()
:修改用户名
calculate_user_age()
:计算年龄
format_user_address()
:格式化地址 所有函数都围绕同一个用户对象操作。
4. 过程内聚
例子:一个「早餐制作」模块,按流程执行:
- 烤面包 → 2. 煎鸡蛋 → 3. 倒果汁。 这些步骤在逻辑上是连贯的(都是早餐流程),但彼此不共享数据。
5. 时间内聚
例子:一个「系统启动」模块,开机时一次性执行:
- 检查硬件 → 2. 加载配置文件 → 3. 初始化日志。 这些任务只在系统启动时执行,但功能彼此无关。
二、低耦合(模块之间尽量减少依赖)
1. 数据耦合(最好)
例子:一个「计算器」函数,通过参数接收数据,返回结果:
2. 标记耦合
例子:一个「用户信息显示」函数,接收一个完整的用户对象:
如果用户对象结构变化(比如字段改名),这个函数可能受影响。
3. 控制耦合
例子:一个「任务执行」函数,通过参数控制行为:
如果新增任务类型,需要修改
run_task
函数。4. 外部耦合(需谨慎)
例子:一个「日志模块」依赖全局配置文件:
如果全局配置的格式改变,日志模块会出错。
5. 公共耦合(需避免)
例子:多个模块共享同一个全局变量:
如果模块A修改了
global_cache
的结构,模块B会崩溃。6. 内容耦合(最差)
例子:模块A直接修改模块B的内部变量:
一旦模块B的内部实现改变(比如变量改名),模块A会直接崩溃。
总结对比
类型 | 高内聚例子 | 低耦合例子 |
好的设计 | 加法计算器(功能纯粹) | 计算器函数(通过参数传递) |
坏的设计 | 早餐制作(步骤松散关联) | 直接修改其他模块内部数据 |
核心原则:
- 高内聚:模块像「瑞士军刀」的每个工具,各司其职。
- 低耦合:模块像「乐高积木」,通过标准接口连接,不关心内部细节。