7.8 壓力出現後的重構路線
7.8 壓力出現後的重構路線
這一章補的是一個很實際的問題:服務還能跑,但已經不好讀、不好測、不好改時,應該怎麼重構。Go 的重構是先辨認壓力來源,再逐步把邊界拉開。
本章目標
學完本章後,你將能夠:
- 辨認 handler、state、interface 與 adapter 的壓力訊號
- 了解什麼時候該先拆函式,什麼時候該拆 package
- 用小步遷移方式保持行為穩定
- 將重構與測試保護綁在一起
- 讓服務變大時仍能維持可讀性
【觀察】壓力通常先出現在局部
Go 服務變大後,最先冒出來的問題通常是局部壓力:
- handler 開始太厚
- state 太分散
- event 語意不清
- 依賴越來越多
- 測試開始很脆弱
這些訊號表示該重構,但不代表要一次重寫。
【判讀】先保行為,再搬結構
重構的基本順序應該是:
- 先讓行為有測試或觀察點
- 再把大函式拆成小函式
- 再把責任拆到 package 或 interface
- 最後才引入更清楚的 adapter 邊界
這樣可以降低重構風險,也比較符合 Go 的漸進式習慣。
【策略】先拆最有壓力的邊界
最值得先處理的通常是這幾種:
| 壓力訊號 | 優先動作 |
|---|---|
| handler 過重 | 拆成協定處理與業務函式 |
| 外部依賴難測 | 抽出小介面 |
| state 外洩 | 集中擁有者並控制 copy boundary |
| 事件混亂 | 先定義語意,再拆 package |
| 依賴耦合太高 | 用 ports/adapters 穩定方向 |
這些動作不一定同時做,而是按壓力大小逐步處理。
【執行】composition root 是最後的收斂點
當系統開始出現明確的 application、domain 與 adapter 時,composition root 會變成依賴組裝的收斂點。重構的目標是讓邏輯邊界與依賴方向更穩定。