知识卡片

耦合与内聚:模块化设计的两个正交目标

专业/工作 · 1291.c

内容

模块化设计要同时追求两个方向相反的目标:模块之间的耦合要最小化(一个模块的存在,是否需要另一个模块知道太多关于它的信息,比如共享的全局数据、显式传递的参数),模块内部的内聚要最大化(一个模块内部各部分是否真的在合力做同一件事)。耦合越低,修改一个模块波及其他模块的风险就越小;内聚越高(功能内聚——模块内所有代码只服务于一个明确目标,优于逻辑内聚——只是”看起来相关”而被硬凑在一起),模块本身的行为就越容易被单独理解和验证。发散:耦合管的是”模块之间”的复杂度,内聚管的是”模块内部”的复杂度,两者合起来给出了一个判断代码该不该拆分、该怎么拆分的通用尺子——如果一个函数/类内部各部分只是逻辑上沾亲带故(内聚低),或者两个模块之间要传太多共享状态才能协作(耦合高),都是需要重新审视模块边界划在哪里的信号。

参考来源

《计算机科学概论》第7章《软件工程》