第 9 章:拆还是合
系列:软件设计的哲学 · 第 9/22 章
全书导读:00-overview.md
一句话总结
合并或拆分模块的准则不是「类要小」,而是能否降低整体复杂度——常合在「一起更简」,常拆在「彼此独立」。
核心观点浓缩
- 合:两模块紧密协作、共享大量知识、拆分后接口更啰嗦 → 考虑合并
- 拆:子问题可独立理解/测试、变更频率不同、边界清晰 → 考虑拆分
- 基类表特化是合的一种:共享接口,实现分化,避免调用方分支
- 反对为拆而拆:拆完若需大量编排代码,总复杂度可能上升
- 与第 5 章一致:按信息边界而非组织架构或时间线切
关键概念 / 金句
| 问题 | 倾向 |
|---|---|
| 改 A 几乎必改 B? | 可能应合 |
| A、B 可独立发布测试? | 可能应拆 |
| 拆分后出现大量 glue? | 拆分可能错了 |
本章在全书中的位置
第 9 章收束第 4–8 章的横向结构议题,与第 7 章纵向分层互补。之后第 10–11 章转向错误定义与设计过程。
个人思考与启发
FITMeServiceRequest 与 FITMeServiceManager 若永远同生共死、共享状态机,评估是否合并为单一深模块,减少跨类同步。反之,纯网络层与业务编排若生命周期不同,应保持拆分。
与《程序员修炼之道》对照
- 正交性提供拆的直觉:不相关才宜分开
- 「解耦」不是最高美德;总复杂度才是裁判
- 重构章节「搬移方法」:以知识归属决定拆合,与本书一致
重点与注意
重点:拆合的唯一标准是复杂度增减,非 SOLID 字母游戏。
重点:合并浅模块常能加深整体——一个深入口胜过两个浅入口。
注意:团队边界、微服务时尚不是拆的理由。
注意:大模块内用子模块 / 命名空间保持可读,勿一步到位微服务。
导航:第 8 章 下拉复杂度 · 下一篇:第 10 章 从设计上消灭错误