Skip to content

第 9 章:拆还是合

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


一句话总结

合并或拆分模块的准则不是「类要小」,而是能否降低整体复杂度——常合在「一起更简」,常拆在「彼此独立」。


核心观点浓缩

  • :两模块紧密协作、共享大量知识、拆分后接口更啰嗦 → 考虑合并
  • :子问题可独立理解/测试、变更频率不同、边界清晰 → 考虑拆分
  • 基类表特化是合的一种:共享接口,实现分化,避免调用方分支
  • 反对为拆而拆:拆完若需大量编排代码,总复杂度可能上升
  • 与第 5 章一致:按信息边界而非组织架构或时间线切

关键概念 / 金句

问题倾向
改 A 几乎必改 B?可能应合
A、B 可独立发布测试?可能应拆
拆分后出现大量 glue?拆分可能错了

本章在全书中的位置

第 9 章收束第 4–8 章的横向结构议题,与第 7 章纵向分层互补。之后第 10–11 章转向错误定义与设计过程。


个人思考与启发

FITMeServiceRequestFITMeServiceManager 若永远同生共死、共享状态机,评估是否合并为单一深模块,减少跨类同步。反之,纯网络层与业务编排若生命周期不同,应保持拆分。


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

  • 正交性提供拆的直觉:不相关才宜分开
  • 「解耦」不是最高美德;总复杂度才是裁判
  • 重构章节「搬移方法」:以知识归属决定拆合,与本书一致

重点与注意

重点:拆合的唯一标准是复杂度增减,非 SOLID 字母游戏。
重点:合并浅模块常能加深整体——一个深入口胜过两个浅入口。
注意:团队边界、微服务时尚不是拆的理由。
注意:大模块内用子模块 / 命名空间保持可读,勿一步到位微服务。


导航第 8 章 下拉复杂度 · 下一篇:第 10 章 从设计上消灭错误

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