🎯 什麼情境該想到我
當你「發現同樣或幾乎一樣的程式結構出現在多個地方」的時候——最典型的訊號是修一個問題時,得記得去別處改同樣的碼。
⚙️ 怎麼用(步驟 / 公式)
這味道是什麼徵兆:重複讓你每次修改都要在多處同步,只要漏改一處就產生 bug;而且閱讀時要花力氣去比對「這兩段到底哪裡不一樣」。重複的存在通常代表少了一個該被抽出來的共同概念。
通常用哪些重構手法對治:
- 提煉函式(Extract Function):把重複片段抽成一個函式,多處共用。
- 拉上移函式(Pull Up Method):若重複出現在同繼承體系的各子類,把它上移到父類。
- 以管道取代迴圈(Replace Loop with Pipeline):若重複是類似的迴圈處理,用集合管道統一表達。
原則:讓每一項知識在系統中只有「單一、明確、權威」的表述(DRY)。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 「長得像」不代表「本質相同」。兩段碼碰巧相似但會因不同原因而各自變化時,強行合併反而製造耦合。
- 消除重複前先確認它們真的表達同一個知識、會一起改變。
- 過度抽象化以消滅每一處微小重複,可能換來更難懂的間接層。
🔗 相關工具
- 過長函式 Long Function(提煉函式同時對治重複與過長)
- 發散式變化 Divergent Change(重複常導致改動散落多處)
- 重構