重構的三大支柱:技能、文化、工具#

本書將重構拆解為三個面向:Skills(技能)、Culture(文化)、Tools(工具)。每個面向都有對應的傳統做法,而本書提出更易學、更實用的替代方案。

Figure 1.1: Skills, culture, and tools

技能:用規則取代 Code Smells#

傳統做法仰賴辨識 code smells——程式碼中「聞起來不對」的跡象。然而 code smells 抽象且依賴經驗,初學者難以掌握。本書改用具體的 rules(規則),提供明確的判斷標準,讓重構決策更可操作。

Figure 1.2: Rules and code smells

文化:六步驟工作流程#

傳統的 red-green-refactor 循環與測試驅動開發綁定。本書提出更通用的六步驟 workflow

步驟名稱說明
1探索理解現有程式碼
2規格化確認預期行為
3實作完成功能
4測試驗證正確性
5重構改善程式碼結構
6交付提交變更

Figure 1.3: Workflow

其中「重構」步驟本身又包含更細緻的操作:先辨識需要改善的地方,再以安全的方式逐步改寫。

Figure 1.4: Detailed view of the refactoring step

工具:編譯器與版本控制#

傳統做法依賴 automated testing(自動化測試)來確保重構安全。本書則強調善用 compiler(編譯器)和 version control(版本控制):

  • 編譯器——型別檢查能在編譯階段攔截許多錯誤
  • 版本控制——隨時可以安全回退,降低重構的風險

什麼是重構#

重構的定義:在不改變程式碼外部行為的前提下,改善其內部結構。目標是讓程式碼更易讀、更易維護

好的程式碼具備三個特質:

特質說明
Human-readable人類容易閱讀理解
Easy to maintain容易修改與擴充
Correctly performs正確執行預期功能

何時該重構#

重構不是獨立的大工程,而應融入日常開發流程。每次修改程式碼時,順手改善經手的部分。

對於 legacy system(遺留系統),建議先重構相關區域,再進行功能修改——這能降低修改的風險並提升效率。

何時不該重構#

並非所有程式碼都值得重構:

情境說明
一次性程式碼用完即丟,投入重構沒有回報
即將退役的程式碼生命週期將盡,改善沒有意義
嚴格效能要求的程式碼重構可能影響效能,需要審慎評估

安全重構的保障#

本書提倡 step-by-step 的重構模式,每一步都是小幅度的安全改動。搭配以下工具確保安全:

  • 版本控制——任何一步出錯都能立即回退
  • 編譯器——每一步改動後編譯,及早發現錯誤

每次重構只做一小步,確認編譯通過後再進行下一步。頻繁 commit 能提供額外的安全網。

範例專案:2D 推箱子遊戲#

本書使用一個 TypeScript 實作的 2D 推箱子遊戲作為貫穿全書的範例。透過逐步重構這個遊戲的程式碼,示範各種規則與技巧的實際應用。

Figure 1.5: A screenshot of the game out of the box

規則的學習方式#

本書的規則有一套循序漸進的學習路徑:

階段名稱說明
1學習名稱先記住規則的名稱,建立共同語言
2學習例外了解何時不適用,避免機械式套用
3理解意圖深入規則背後對應的 code smell,掌握「為什麼」

Figure 1.6: How to use the rules

規則是入門的捷徑,但最終目標是理解背後的設計意圖。當你能直接辨識 code smells 時,規則就成了輔助而非必需。