Skip to content

第 5 章:信息隐藏与泄漏

系列:软件设计的哲学 · 第 5/22 章
全书导读:00-overview.md


一句话总结

模块应隐藏设计决策;当同一知识在多处出现或跨边界暴露时,即发生信息泄漏,复杂度随之扩散。


核心观点浓缩

  • 信息隐藏:把可能变化的决策封在模块内,外部只依赖稳定抽象
  • 泄漏:调用方或兄弟模块需了解本不该知道的内部格式、顺序、协议
  • 时间分解泄漏:按「先 A 后 B」拆模块,把执行顺序泄漏给上层
  • 泄漏导致变更放大:改内部表示要同步改所有知情方
  • 隐藏的是知识,不仅是 private 关键字——public API 形状也会泄漏

关键概念 / 金句

泄漏类型例子
格式泄漏暴露内部 JSON 字段名,调用方直接解析
顺序泄漏必须先 connectconfigure,文档外无保障
临时分解按开发步骤拆类,非按信息边界拆

本章在全书中的位置

第 5 章解释深模块如何成立:接口简单是因为知识被藏住了。与第 9 章「拆还是合」、第 7 章「分层」紧密相连——拆分准则本质是信息边界。


个人思考与启发

配置项从 QSettings 读到 UI 再传到 Service,若三层都懂键名与默认值,一改键名全库搜。应收敛到单一 AppConfig 深模块,外部只问「导出路径是什么」。


与《程序员修炼之道》对照

  • DRY:重复常是信息未隐藏,同一知识拷贝到多处
  • 正交:模块正交 ⟺ 各自隐藏独立知识,变更不牵连
  • 「勿打破封装」与本书一致;本书进一步指出 API 设计 也会破封装

重点与注意

重点:问「这个知识必须被谁知道?」——答案应尽可能少。
重点:按信息边界拆模块,不按开发时间线拆。
注意friend、包内可见等技巧是手段,目标是知识不扩散
注意:过度隐藏导致调试困难时,用可观测性接口(日志、诊断)而非泄漏内部结构。


导航第 4 章 模块应深 · 下一篇:第 6 章 通用模块更深

基于 VitePress 强力驱动 | 记录技术与生活