重構 是做什麼的?
使用時機
- 使用者要求重構、重組、程式碼移動、模組拆分或合併、介面簡化、分階段改寫、依賴反轉或移除重複程式碼。
- 某項變更聲稱保留行為但改變結構。
- 重構影響多個呼叫端、公開符號、測試或所有權邊界。
不使用時機
- 任務是小型本地錯誤修復,沒有結構性變更。
- 使用者明確要求行為變更,而非保留行為的重構。
- 在決定是否重構之前,需要更廣泛的設計審查。
- 首要步驟是廣泛的工程審查,因為主要風險區域仍不明確。
工作流程
- 定義要保留的行為以及要改變的結構。
- 說明非目標:不新增功能、不改變相容性、不改變錯誤語意、除非明確要求否則不聲明效能改進。
- 檢查受重構影響的呼叫端、測試、文件、設定檔、產生的程式碼及公開表面。
- 當行為重要但覆蓋率不足時,新增特徵測試。
- 將工作拆分為小型可逆轉的步驟,並在有意義的邊界處進行編譯與測試。
- 將機械性的移動或重新命名與語義編輯分開。
- 保留公開 API,除非使用者明確要求破壞性變更。
- 僅在遷移完呼叫端並驗證行為後,才移除舊路徑。
參考資料
- 在規劃多步驟重構之前,請先閱讀
references/refactor-playbook.md。 - 當測試薄弱或行為必須鎖定時,請先閱讀
references/characterization-tests.md。 - 在最終確定重構之前,請先閱讀
references/review-checklist.md。
停止條件
- 要保留的行為不明確。
- 重構需要廣泛的行為變更才能成功。
- 公開 API、設定、協定、儲存、指標或錯誤語意可能在未經使用者明確同意的情況下變更。
- diff 中混合了重構、功能開發、效能最佳化與清理,無法安全審查。
輸出規則
- 報告哪些行為意圖保持不變。
- 將機械性變更與語義變更分開報告。
- 報告保護行為的測試或檢查。
- 說明任何未經驗證的行為、相容性或效能方面。