第 5 章:宁弯不折
系列:程序员修炼之道 · 第 5/9 章
一句话总结
没有最终决定;用可撤销、解耦、柔性架构与配置,让系统在需求变化时弯曲而不折断。
核心观点浓缩
- 可撤销性:设计决策可回滚;Feature Flag、分支、抽象层
- 柔性架构:延迟具体绑定;插件、策略、接口
- 解耦:模块间少假设;消息、事件、API 边界
- 变换式编程 / JOT:用数据流与声明式思维减少状态纠缠
- 继承税:继承昂贵;优先组合
- 配置:把易变项外置;但不过度配置化
- 元编程:代码生成、DSL 在合适场景减少重复
关键概念 / 金句
- 「没有最终决定」= 保留演进空间
- 继承税:深层继承树难测难改
- 解耦是正交性在架构层的体现
本章在全书中的位置
把第 2 章「可逆性」扩展到架构与代码结构,是大型 Qt/VTK 应用能长期迭代的关键章。
个人思考与启发
扫描仪连接、导出格式、云上传策略适合策略 + 配置,而非主干 if。
插件式 IO(plugins_io/)已是柔性架构:新格式加插件少改 Session。
继承税:少扩深层 JMSession 子类,用组合 Command、Service。
与《软件设计的哲学》对照
- 解耦 ↔ 减少依赖、信息隐藏
- 通用模块更深 ↔ 配置与扩展点设计
- 继承税 ↔ 组合优于深层类层次(深模块常靠组合)
重点与注意
重点:可撤销、解耦、组合 是「宁弯不折」三板斧。
重点:继承税提醒:子类不是默认复用手段。
重点:配置外置易变项,但配置爆炸也是复杂度。
注意:解耦过度会变成间接层地狱,需平衡。
注意:柔性架构要配合测试,否则回滚不敢用。