第4章 模块性:保持清晰,保持简洁
以封装、正交性、SPOT 与胶合层成本寻找真正可分离的模块边界。
学习目标
- 能解释 第4章 模块性:保持清晰,保持简洁 如何回答“把一个同时解析、校验、存储和展示数据的程序重新分层”
- 能沿 封装单元 → 正交检查 → SPOT 所有权 → 胶合层 → 模块测试 重建输入、状态、输出和失败边界
- 能使用 coupling_cost = shared_knowledge + interface_width + glue_layers 比较正常输入、恰好边界与单点故障
- 能定位知识重复点并证明拆分后改动传播范围缩小
为什么要从这个问题开始
以封装、正交性、SPOT 与胶合层成本寻找真正可分离的模块边界。 模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。 在本课程中,Unix 风格只是一组待验证假设;当延迟、安全、事务一致性、团队能力或平台约束改变时,允许用证据拒绝它。
直觉、对象与计算合同
贯穿场景是:把一个同时解析、校验、存储和展示数据的程序重新分层。先固定输入版本、资源预算和成功条件,再观察 模块尺寸、知识唯一 与 改动传播;若中途改了数据或口径,结果作废。
这个式子用于公开变量关系,不冒充经验常数。如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。 需要特别防范的失败是:把同一规则复制到多个模块,并用更多适配器掩盖重复知识。
↡第4章 模块性:保持清晰,保持简洁在第4章 模块性:保持清晰,保持简洁中对应封装单元的可复核状态。·
↡模块尺寸在第4章 模块性:保持清晰,保持简洁中对应正交检查的可复核状态。·
↡接口宽度在第4章 模块性:保持清晰,保持简洁中对应SPOT 所有权的可复核状态。·
↡知识唯一在第4章 模块性:保持清晰,保持简洁中对应胶合层的可复核状态。·
↡转换成本在第4章 模块性:保持清晰,保持简洁中对应模块测试的可复核状态。·
↡改动传播在第4章 模块性:保持清晰,保持简洁中对应封装单元的可复核状态。正式目录节点:解释与验证
下面逐项保留作者送印版目录坐标。每一项都放回 第4章 模块性:保持清晰,保持简洁 的机制链解释,并在页面实验组件与章末复核清单中再次出现;标题出现本身不计作覆盖。
4. Modularity
“4. Modularity”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查模块尺寸:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Encapsulation and Optimal Module Size
“Encapsulation and Optimal Module Size”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查接口宽度:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Compactness and Orthogonality
“Compactness and Orthogonality”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查知识唯一:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Compactness
“Compactness”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查转换成本:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Orthogonality
“Orthogonality”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查改动传播:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
The SPOT Rule
“The SPOT Rule”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查模块尺寸:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Compactness and the Strong Single Center
“Compactness and the Strong Single Center”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查接口宽度:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
The Value of Detachment
“The Value of Detachment”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查知识唯一:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Software Is a Many-Layered Thing
“Software Is a Many-Layered Thing”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查转换成本:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Top-Down versus Bottom-Up
“Top-Down versus Bottom-Up”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查改动传播:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Glue Layers
“Glue Layers”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查模块尺寸:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Case Study: C Considered as Thin Glue
“Case Study: C Considered as Thin Glue”是用于观察取舍的案例,不是要求照搬的产品推荐。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查接口宽度:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Libraries
“Libraries”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查知识唯一:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Case Study: GIMP Plugins
“Case Study: GIMP Plugins”是用于观察取舍的案例,不是要求照搬的产品推荐。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查转换成本:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Unix and Object-Oriented Languages
“Unix and Object-Oriented Languages”是本单元比较的机制候选,名称本身不代表应当采用。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查改动传播:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
Coding for Modularity
“Coding for Modularity”把本单元的总机制细化为一个可定位的主题坐标。 在“模块化不是文件数量,而是知识所有权:每项知识只有一个权威位置,模块通过窄接口协作,胶合代码只负责转换而不复制业务规则。”这条因果链中,本节点重点检查模块尺寸:先写预期,再改变一个直接条件,并用如果拆分增加了双向依赖或重复规则,应合并边界而非继续细分。作为停止或继续的边界。
三视图实验:先预测,再操作
1. 组合拓扑
沿 封装单元 → 正交检查 → SPOT 所有权 → 胶合层 → 模块测试 定位职责和失败传播,只允许改变一个直接条件。
taoup-chapter-04-modularity · 组合拓扑
第4章 模块性:保持清晰,保持简洁
把一个同时解析、校验、存储和展示数据的程序重新分层
选择验证情境
选择工程动作
正常路径和责任链一致,可以进入下一节点,但仍须保存可重放记录。
职责、接口与失败传播
4. Modularity
常见误区
术语
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 第4章 模块性:保持清晰,保持简洁
模块尺寸的检查入口;必须能回到输入、状态与失败证据。
- 模块尺寸
接口宽度的检查入口;必须能回到输入、状态与失败证据。
- 接口宽度
知识唯一的检查入口;必须能回到输入、状态与失败证据。
- 知识唯一
转换成本的检查入口;必须能回到输入、状态与失败证据。
- 转换成本
改动传播的检查入口;必须能回到输入、状态与失败证据。
- 改动传播
模块尺寸的检查入口;必须能回到输入、状态与失败证据。
练习与答案
练习
- 问题 1:目录证据复核。 选择三个相邻目录节点,说明它们在 第4章 模块性:保持清晰,保持简洁 中的因果关系,并指出各自的实验与练习证据。
- 问题 2:故障诊断。 在“把一个同时解析、校验、存储和展示数据的程序重新分层”中注入“把同一规则复制到多个模块,并用更多适配器掩盖重复知识”,第一处应该拒绝结果的位置在哪里?
- 问题 3:方案判断。 什么情况下应该拒绝本章首选的 Unix 风格方案?
本章小结
第4章 模块性:保持清晰,保持简洁 的核心不是记住目录名,而是用 封装单元、正交检查、SPOT 所有权、胶合层、模块测试 把 模块尺寸、接口宽度、知识唯一、转换成本、改动传播 连成一条可反驳、可重放、可撤回的证据链。最终验收是:能定位知识重复点并证明拆分后改动传播范围缩小。