這一章補的是一個很實際的問題:服務還能跑,但已經不好讀、不好測、不好改時,應該怎麼重構。Go 的重構是先辨認壓力來源,再逐步把邊界拉開。

本章目標

學完本章後,你將能夠:

  1. 辨認 handler、state、interface 與 adapter 的壓力訊號
  2. 了解什麼時候該先拆函式,什麼時候該拆 package
  3. 用小步遷移方式保持行為穩定
  4. 將重構與測試保護綁在一起
  5. 讓服務變大時仍能維持可讀性

【觀察】壓力通常先出現在局部

Go 服務變大後,最先冒出來的問題通常是局部壓力:

  • handler 開始太厚
  • state 太分散
  • event 語意不清
  • 依賴越來越多
  • 測試開始很脆弱

這些訊號表示該重構,但不代表要一次重寫。

【判讀】先保行為,再搬結構

重構的基本順序應該是:

  1. 先讓行為有測試或觀察點
  2. 再把大函式拆成小函式
  3. 再把責任拆到 package 或 interface
  4. 最後才引入更清楚的 adapter 邊界

這樣可以降低重構風險,也比較符合 Go 的漸進式習慣。

【策略】先拆最有壓力的邊界

最值得先處理的通常是這幾種:

壓力訊號優先動作
handler 過重拆成協定處理與業務函式
外部依賴難測抽出小介面
state 外洩集中擁有者並控制 copy boundary
事件混亂先定義語意,再拆 package
依賴耦合太高用 ports/adapters 穩定方向

這些動作不一定同時做,而是按壓力大小逐步處理。

【執行】composition root 是最後的收斂點

當系統開始出現明確的 application、domain 與 adapter 時,composition root 會變成依賴組裝的收斂點。重構的目標是讓邏輯邊界與依賴方向更穩定。