High Cohesion, Low Coupling?
2025-2-19
| 2025-2-19
Words 895Read Time 3 min
type
status
date
slug
summary
tags
category
icon
password

一、高内聚(模块内部专注做一件事)

1. 功能内聚

例子:一个「加法计算器」函数,只负责两数相加,不处理减法或乘法。

2. 顺序内聚

例子:一个「咖啡机」模块,流程严格按顺序执行:
  1. 磨咖啡豆 → 2. 烧开水 → 3. 冲泡咖啡。 每一步的输出是下一步的输入(比如磨好的豆子传给冲泡步骤)。

3. 通信内聚

例子:一个「用户信息处理」模块,所有函数都操作同一份用户数据:
  • update_user_name():修改用户名
  • calculate_user_age():计算年龄
  • format_user_address():格式化地址 所有函数都围绕同一个用户对象操作。

4. 过程内聚

例子:一个「早餐制作」模块,按流程执行:
  1. 烤面包 → 2. 煎鸡蛋 → 3. 倒果汁。 这些步骤在逻辑上是连贯的(都是早餐流程),但彼此不共享数据。

5. 时间内聚

例子:一个「系统启动」模块,开机时一次性执行:
  1. 检查硬件 → 2. 加载配置文件 → 3. 初始化日志。 这些任务只在系统启动时执行,但功能彼此无关。

二、低耦合(模块之间尽量减少依赖)

1. 数据耦合(最好)

例子:一个「计算器」函数,通过参数接收数据,返回结果:

2. 标记耦合

例子:一个「用户信息显示」函数,接收一个完整的用户对象:
如果用户对象结构变化(比如字段改名),这个函数可能受影响。

3. 控制耦合

例子:一个「任务执行」函数,通过参数控制行为:
如果新增任务类型,需要修改 run_task 函数。

4. 外部耦合(需谨慎)

例子:一个「日志模块」依赖全局配置文件:
如果全局配置的格式改变,日志模块会出错。

5. 公共耦合(需避免)

例子:多个模块共享同一个全局变量:
如果模块A修改了 global_cache 的结构,模块B会崩溃。

6. 内容耦合(最差)

例子:模块A直接修改模块B的内部变量:
一旦模块B的内部实现改变(比如变量改名),模块A会直接崩溃。

总结对比

类型
高内聚例子
低耦合例子
好的设计
加法计算器(功能纯粹)
计算器函数(通过参数传递)
坏的设计
早餐制作(步骤松散关联)
直接修改其他模块内部数据
核心原则
  • 高内聚:模块像「瑞士军刀」的每个工具,各司其职。
  • 低耦合:模块像「乐高积木」,通过标准接口连接,不关心内部细节。
  • 软件工程
  • Building effective agentsHow the CPU Translates Virtual Addresses to Physical Addresses ?
    Loading...