🎯 什麼情境該想到我
當你「一個函式對『另一個模組』的資料興致勃勃、頻繁存取它的欄位與方法,反而很少碰自己所在類別的資料」的時候。
⚙️ 怎麼用(步驟 / 公式)
這味道是什麼徵兆:程式的一個基本原則是「把一起變化的東西放在一起」——資料與操作它的行為應該相鄰。當某函式花大半力氣在操弄別的物件的資料,代表它其實比較想待在那個物件裡。
通常用哪些重構手法對治:
- 搬移函式(Move Function):把這個函式整個搬到它所依戀的那個類別去。
- 提煉函式(Extract Function):若只有函式中一段對別人資料上心,先把那段抽出來,再搬過去。
判斷歸屬的常見準則:看這段碼用到「誰的資料最多」,就把它放到誰那裡。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 有些設計刻意把「行為」與「資料」分離(如某些策略/訪問者模式、把展示邏輯與領域資料分開),這種情況的「依戀」是有意為之,不算味道。
- 若一段碼平均地用到好幾個模組的資料,就把它放到它「用最多資料」的那個模組。
🔗 相關工具
- 純資料類別 Data Class(只有資料沒行為,行為都跑到別處,最易引發依戀)
- 內幕交易 Insider Trading(模組間過度存取彼此內部)
- 過長函式 Long Function(提煉是搬移前常見的第一步)
- 重構