🎯 什麼情境該想到我
當你「一個物件的某個(或某幾個)欄位,只在特定情況下才被賦值,其他時候都是空的」的時候——讀碼的人得不斷猜「它現在到底有沒有值」。
⚙️ 怎麼用(步驟 / 公式)
這味道是什麼徵兆:物件裡總是空著、只在某個演算法執行時才短暫有值的欄位,非常令人困惑——因為你直覺以為欄位隨時該有意義。這些欄位通常是某段複雜計算的中間狀態,卻被硬塞進物件的長期狀態裡。
通常用哪些重構手法對治:
- 提煉類別(Extract Class):把這些成群的暫時欄位與操作它們的邏輯,抽成一個專責的類別,讓它們有自己的家。
- 引入特例(Introduce Special Case / Null Object):針對「欄位沒值」的情況提供一個特例物件,取代到處的空值判斷。
- 搭配搬移函式把只在該情境用到的行為一起搬過去。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 有些欄位天生就是選填(optional)且語意清楚,不算此味道;重點在「令人困惑的、演算法中間狀態」。
🔗 相關工具
- 資料泥團 Data Clumps(成群的暫時欄位常一起提煉成類別)
- 誇誇其談通用性 Speculative Generality(只為特殊情境預留的欄位)
- 重構