跳转到内容

第九部分 可用资源:想深入时看什么

读完这本书,你认识了 61 个重构手法,也走过了一次完整的重构。想往某个方向继续深入,该去看什么?这一部分按方向列出资源,每个方向先说它解决什么问题、本书讲到了哪一步,再列几项值得花时间的资源,最后一句“先看哪一个”,给只想挑一样的人。

这里只列经过时间检验、或者本书写作时核对过的资源,不追求全。书名给出原名,有中译本的同时给出中译本的书名;网址都在 2026 年 10 月核对过。

本书覆盖了 Fowler《重构(第 2 版)》的全部手法,但为了照顾 Python 和 TypeScript 读者,案例都是重新设计的,每个手法的“做法”一节也有所简化。想看原汁原味的版本、或者想看手法之间更细的关联,回到原书。

  • Martin Fowler《Refactoring: Improving the Design of Existing Code》第 2 版,中译本《重构:改善既有代码的设计(第 2 版)》。本书的源头。原书用 JavaScript 举例,第 1 章的综合案例值得和本书第 57 章对照着读,两者的思路完全一样,领域不同。每个手法的“做法”一节比本书更细,遇到复杂情况时可以查。
  • refactoring.com 的在线目录(refactoring.com/catalog)。Fowler 本人维护的手法目录,每个手法一张卡片,有简图和链接到原书的页码。适合快速查一个手法的英文名和别名。
  • Refactoring Guru 中文站(refactoringguru.cn/refactoring)。用图解和动画讲坏味道和重构手法,还有设计模式部分,中文翻译完整。适合视觉型的读者,作为本书第 2 章的补充很好。
  • Joshua Kerievsky《Refactoring to Patterns》,中译本《重构与模式》。本书第 60 章的展开版:如何用一系列小重构把代码推向(或推离)设计模式,每个“向模式重构”都有完整的步骤和案例。读完本书和《设计模式》之后读它最合适。
  • Kent Beck《Tidy First?》(2023)。比重构更小的整理动作,以及什么时候整理、整理多少的经济学思考。篇幅很短,和本书第 58 章互为补充。

先看哪一个:只读一本就读 Fowler 原书第 2 版,本书读完再读它,会快很多。

本书第 2 章讲了 24 种坏味道,“问题在哪”一节反复用到它们。坏味道背后的问题是“什么样的代码才算好读”,这个话题值得单独读。

  • Dustin Boswell、Trevor Foucher《The Art of Readable Code》,中译本《编写可读代码的艺术》。专门讲命名、注释、控制流、函数拆分这些日常细节,案例短小,一个周末能读完。和本书第二部分的手法高度重合,可以当作“为什么要这样改”的另一种讲法。
  • Robert C. Martin《Clean Code》,中译本《代码整洁之道》。影响很大的一本书,函数、命名、注释的几章值得读。书里有些主张比较绝对(比如函数要非常短),读的时候带着自己的判断。
  • PEP 8(peps.python.org/pep-0008)。Python 官方的风格指南,命名约定、空行、导入顺序都在这里。本书的 Python 代码遵循它。
  • Google TypeScript Style Guide(google.github.io/styleguide/tsguide.html)。TS 风格指南里写得最完整的之一,除了格式,还讲了哪些语言特性该用、哪些该避免。

先看哪一个:《编写可读代码的艺术》,薄、具体、马上能用。

本书第 1 章说重构的第一个前提是测试,第 58 章讲了特征测试的基本做法。但真实的遗留代码往往难测得多:函数里直接连数据库、读系统时间、调外部接口,测试根本插不进去。这个方向专门解决“怎么给难测的代码补上测试”。

  • Michael Feathers《Working Effectively with Legacy Code》,中译本《修改代码的艺术》。这个方向的经典,没有之一。它系统地讲了几十种“打破依赖”的技巧,让不可测的代码变得可测,每种技巧都有前后对比。书里的例子以 Java、C++ 为主,思路完全适用于 Python 和 TS。
  • Kent Beck《Test-Driven Development: By Example》,中译本《测试驱动开发》。不是讲遗留代码的,但它让你习惯“小步、先写测试、马上验证”的节奏,这正是重构需要的节奏。
  • Roy Osherove《The Art of Unit Testing》,中译本《单元测试的艺术》。讲怎么写好单元测试:命名、隔离、桩和模拟对象的区别、测试的可维护性。测试本身写得不好,重构时会处处掣肘。

先看哪一个:《修改代码的艺术》。如果你工作中面对的主要是老代码,它比本书更直接解决你的问题。

重构改善的是设计,但“好的设计长什么样”需要另外学。本书在“相关的设计模式”里点到了很多模式,这个方向把它们展开。

  • 本系列《设计模式》(多练网)。和本书配套,23 个 GoF 模式,同样是 Python 和 TypeScript 双语、从案例出发。本书各章“相关的设计模式”都指向它的对应章节。
  • Eric Freeman 等《Head First Design Patterns》,中译本《Head First 设计模式》。最好入门的设计模式书,图多、口语化。原书第 2 版用 Java。
  • Martin Fowler《Patterns of Enterprise Application Architecture》,中译本《企业应用架构模式》。本书第 9、15、33 章提到的值对象、第 33 章的仓储,都出自这里。讲的是业务系统里反复出现的结构:分层、领域模型、数据映射。
  • Robert C. Martin《Clean Architecture》,中译本《架构整洁之道》。从模块到系统的依赖方向问题,适合在单个类的重构做熟之后,思考更大尺度的结构。
  • Neal Ford 等《Building Evolutionary Architectures》,中译本《演进式架构》。把“小步、持续、有测试保护”的重构思路放大到架构层面:系统怎样在不停机的情况下逐步改变结构。和第 58 章的绞杀者做法一脉相承。

先看哪一个:本系列的《设计模式》,和本书的写法、语言、案例风格一致,衔接最顺。

第 59 章汇总了 IDE 的自动重构、代码检查和类型检查。它们的官方文档是最准确的参考。

先看哪一个:你正在用的那个编辑器的重构文档,花半小时把常用快捷键练熟,回报最快。

本书刻意避免讲与手法无关的语言特性,但重构的结果写得是否地道,取决于你对语言的熟悉程度。第 60 章提到,一等函数、生成器、联合类型会让一些结构变得更轻。

  • Brett Slatkin《Effective Python》,有中译本。上百条具体的 Python 写法建议,每条都有前后对比,很多条目本身就是一次小重构。
  • Luciano Ramalho《Fluent Python》,中译本《流畅的 Python》。深入讲 Python 的数据模型、迭代器、生成器、装饰器。读完你会更清楚什么时候该用类、什么时候用函数和推导式。
  • Dan Vanderkam《Effective TypeScript》。TS 版的同类书,讲类型设计、类型推断和常见陷阱。第 15 章的品牌类型、第 14 章的只读数组这类技巧,书里有更系统的讲解。
  • 本系列《程序设计语言特性》(多练网)。按特性而不是按语言组织,讲并发、错误处理、函数式特性等在 Python、TS、Go、C# 里的异同,是本书第 60 章“语言特性让一些模式变轻”的展开。

先看哪一个:写 Python 的读《Effective Python》,写 TS 的读《Effective TypeScript》。

重构是手艺。读十遍不如做一遍,这也是多练网名字的由来。本书每个完整档的章节都有一道练习,下面这些是更大、更接近真实的练习材料,业界叫它们“重构 kata”。

  • Gilded Rose(github.com/emilybache/GildedRose-Refactoring-Kata)。最有名的重构练习:一个旅店的库存系统,规则复杂、代码纠缠,要求你在不破坏现有行为的前提下加一个新功能。仓库里有几十种语言的起始代码,包括 Python 和 TypeScript。第一步永远是先写特征测试(第 58 章),然后照第 57 章的节奏一步步来。
  • Tennis Refactoring Kata(github.com/emilybache/Tennis-Refactoring-Kata)。网球计分规则的几个不同实现,各有各的坏味道,代码短,测试已经写好,适合练习手法本身:以卫语句取代嵌套条件、分解条件表达式、以多态取代条件表达式。
  • Trivia(github.com/jbrains/trivia)。“遗留代码静修会”(Legacy Code Retreat)用的问答游戏代码,故意写得很糟,而且没有测试。适合练习从零补测试,再小步重构的全过程。

怎么练效果最好:每次只练一个目标(比如“今天只用提炼函数和变量改名”),限时,结束后丢掉代码,下次从头再来。和练琴一样,重复比一次做完更重要。和同事结对练习,交换着当“写代码的人”和“看代码的人”,进步更快。

先看哪一个:Tennis Refactoring Kata,代码短、测试现成,一个小时就能完整练一遍。

如果你想系统地往下走,而不只是挑一本:先用一两周做 Tennis 和 Gilded Rose 两个 kata,把本书的手法练成手上的习惯;然后读 Fowler 原书第 2 版,对照本书查漏补缺;接着读本系列的《设计模式》和 Kerievsky 的《重构与模式》,理解重构的目的地;工作里遇到没有测试的老代码时,读《修改代码的艺术》。语言专属的书随时可以穿插着读。

  • 想看原书的完整机制,读 Fowler《重构(第 2 版)》;想要图解,看 Refactoring Guru 中文站。
  • 面对没有测试的老代码,读《修改代码的艺术》。
  • 想知道重构的目的地有哪些,读本系列《设计模式》,再读《重构与模式》。
  • 工具文档花半小时,快捷键练熟,回报最快。
  • 真正的进步来自练习:从 Tennis kata 开始,再挑战 Gilded Rose 和 Trivia。