高内聚指一个模块内部的元素都服务于同一个职责,联系紧密;低耦合指模块之间只通过窄而明确的接口交互,互相了解得越少越好。两者是同一目标的正反两面:内聚上去了,耦合自然就降下来。

为什么重要:内聚高,修改一个功能时改动都集中在一处;耦合低,改动不会涟漪式扩散,模块可独立开发、测试、替换和复用。低内聚的模块是“杂物间”,改任何需求都得进去翻;高耦合的系统则牵一发动全身,测试和部署都被迫捆绑。

如何做到:

  • 按职责和变化原因划分模块(参考 SRP、信息隐藏)。
  • 模块间依赖抽象接口而非具体实现,接口尽量窄。
  • 共享数据最小化:避免公共可变状态、上帝对象、过宽的全局配置。
  • 用领域边界(如 DDD 限界上下文)校验划分是否合理。

易错点:低耦合不等于零耦合,消息、事件同样是耦合只是更弱;过度拆分会换来分布式或跨模块跳转的复杂度,要在内聚收益与拆分成本之间平衡。