跳转到内容

前言

这是一本讲重构(Refactoring)手法的书。它回答的问题很具体:手里这段代码哪里会让你吃亏,改成什么样更好,以及怎么一小步一小步改过去而不把程序弄坏。全书覆盖 Martin Fowler《重构(第 2 版)》里的 61 个手法,每个手法都从一个日常开发里的小案例讲起,代码同时给 Python 和 TypeScript。

前两章和最后几章按顺序读,中间的手法章节当手册查。

  • 第 1 章用一个 30 行的例子让你先做一次重构,然后说清重构是什么、为什么值得做、做之前要准备什么,最后给出全部 61 个手法的总表。
  • 第 2 章讲 24 种“坏味道”,就是代码该重构了的信号。后面每一章指出问题时都用这些名字,学完这一章你就有了一套和同事讨论代码的共同语言。
  • 第二到第八部分是手法本身,按 Fowler 的七个分类分成七个部分。每个部分开头有一篇导读,告诉你这类手法解决什么问题、闻到什么味道先看哪一章。
  • 第 57 章起是收尾:一次完整的重构、什么时候该重构、怎么让 IDE 和 AI 替你动手、重构和设计模式的关系。
  • 第九部分按方向列出想深入时可以看的书、网站和练习材料。附录 A 是坏味道与手法的对照表,附录 B 是 61 个手法的速查表,可以按中文名或英文名查。

建议的读法:先读第 1、2 章,再读第 57 章看一次完整的重构,然后按需翻中间的手法章节。读完全书想练手,看第九部分的“练手”一节。

手法章节分三档。完整档有场景、原来的写法、问题在哪、重构之后、怎么一步步做、真实系统里的例子、练习和小结,还配一份测试。精简档小节相同但案例更小。速览档只有场景、前后对比、定义和什么时候别用。每章开头两行话说明这个手法做什么、解决什么痛,看完这两行就能决定要不要往下读。

书里带输出注释的代码都是完整可运行的文件,末尾有入口代码打印结果,紧跟着的注释写着预期输出。你只需要两样东西:

  • Python 3.12 或更新。运行 python --version 确认。
  • Node.js 22 或更新,以及 npx tsx。第一次运行 npx tsx 时它会自动下载。

不需要安装任何第三方库。测试用 Python 自带的 unittest 和 Node 自带的 node:test,所以也不用装测试框架。

运行一个示例:

python after.py
npx tsx after.ts

运行一份测试:

python -m unittest test_shipping
npx tsx --test shipping.test.ts

测试文件里会看到 from target import … 或 import { … } from "./target"。target 不是一个真实存在的文件,而是一个约定:把 before.py 复制成 target.py,测试跑的就是重构前的版本;把 after.py 复制成 target.py,跑的就是重构后的版本。同一份测试两版都应该通过,这正是“重构不改变程序行为”的意思,也是本书每个完整档案例的验收标准。

书里带输出注释的代码块都是完整的文件,开头一行注释说明它是哪个版本(重构前还是重构后),直接从网页复制到一个 .py 或 .ts 文件里就能运行;少数几行的片段只用来说明某一步,不单独运行。完整文件不需要别的依赖,运行结果写在代码末尾的注释里。完整档章节的测试文件也在正文里,按前面说的办法复制成 target.py 或 target.ts 即可。