在開篇,Martin Fowler 不急著定義重構,
而是透過一個簡單範例,展示重構的實際流程。

本章核心精神在於:重構是由一連串微小且獨立的變動所組成
透過小步快跑(Small Steps),我們可確保改善程式碼結構時,隨時保持可運作狀態。

標準重構步驟#

作者在範例展示了嚴謹的重構順序,確保每步驟都在控制中:

flowchart LR
    A["1️⃣ 準備測試<br/>(Check)"] --> B["2️⃣ 拆解函式<br/>(Extract)"]
    B --> C["3️⃣ 變數命名<br/>(Rename)"]
    C --> D["4️⃣ 優化變數<br/>(Remove/Query)"]
    D --> E["5️⃣ 拆分階段<br/>(Split Phase)"]
    E --> F["6️⃣ 引入多型<br/>(Polymorphism)"]
重構行動目的技巧
準備測試
(Check)
建立安全網,確保邏輯一致自動化驗證
拆解函式
(Extract Function)
依「完整行為」拆解成小區塊每次拆解後執行測試
變數命名
(Rename Variable)
提升可讀性回傳值命名為 result
優化變數
(Remove/Query Variable)
移除不必要的區域變數減少暫存變數降低依賴
拆分階段
(Split Phase)
依任務階段進行隔離分離計算與輸出邏輯
引入多型
(Polymorphism)
用類型區隔計算情境取代冗長的 Switch/If-else

判斷程式碼好壞的關鍵,在於它
是否清楚明瞭(Human-readable)以及是否易於修改(Modifiable)

關於命名#

函式名稱即文件: 一個命名良好的函式,應讓閱讀者不需看內文就能理解其功能。
這也是自我記錄(Self-documenting)程式碼的基礎。

關於重構時機#

困難是重構的信號: 當你想新增功能,卻發現因現有結構複雜而困難重重時,
這就是個訊號:先重構,再開發 。先將結構整理好,新功能的加入就會順理成章。

重構過程中,不需過度考慮效能問題。
先專注讓程式碼結構清晰、易於理解。效能優化應在重構完成後,針對特定瓶頸進行的獨立步驟。