🎯 什麼情境該想到我
當你「看到一堆為了『以後也許會需要』而預留的抽象、鉤子(hook)、參數或彈性,但現在根本沒人用到」的時候。
⚙️ 怎麼用(步驟 / 公式)
這味道是什麼徵兆:出於「將來可能要」而加的多餘機制,帶來的是此刻實實在在的複雜度——更難懂、更難改、更多要維護的東西。若那個「將來」沒到來,這些通用性就是純粹的負擔。作者引 Brian Foote:只在真正需要時才做,不要因為「你覺得將來會需要」而做。
通常用哪些重構手法對治:
- 摺疊繼承體系(Collapse Hierarchy):拿掉只有單一實作、沒帶來價值的抽象層。
- 內聯函式/內聯類別(Inline Function / Inline Class):把沒必要的間接層併回去。
- 改變函式宣告(Change Function Declaration):移除從沒被用到的參數。
- 移除死程式碼(Remove Dead Code):刪掉沒人呼叫、只為假想需求存在的碼。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 真的有「近在眼前、已知會來」的需求時,適度預留是合理設計,不算此味道。
- 框架/函式庫(供外部擴充)本就需要一定的通用性,判斷標準不同於應用程式碼。
🔗 相關工具
- 冗員元素 Lazy Element(沒被用到的抽象常同時是冗員)
- 暫時欄位 Temporary Field(只在假想情境才用到的欄位也是一種投機)
- 重構