🎯 什麼情境該想到我
當你「一個類別只有欄位加上 getter/setter,卻沒有任何真正的行為,別人都是把它的資料拿出來、在外面自己處理」的時候。
⚙️ 怎麼用(步驟 / 公式)
這味道是什麼徵兆:純資料類別常是「行為被放錯地方」的訊號——操作這些資料的邏輯散落在其他類別裡(往往伴隨依戀情結)。物件導向的精神是把資料與操作它的行為放在一起。
通常用哪些重構手法對治:
- 找出別的地方「拿了這個物件的資料在做的事」,用搬移函式(Move Function)把那些行為搬進來;必要時先提煉函式再搬。
- 封裝集合(Encapsulate Collection):若欄位是集合,別直接暴露,改提供受控的增刪方法。
- 檢視 setter:不該被外部隨意改的欄位,用移除設值函式收斂。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 純資料結構有其正當用途:例如某些 DTO、值物件、函式間傳遞的中間結果,本就該是「只有資料」。
- 剛從別處提煉出來、行為尚未搬入的類別,短暫是純資料是正常過渡。
🔗 相關工具
- 依戀情結 Feature Envy(純資料類別最常引發的伴生味道)
- 過大類別 Large Class(把行為搬進來時別讓它膨脹過頭)
- 重構