🎯 什麼情境該想到我
當你「看到一串連續的取值呼叫,像 a.getB().getC().getD() 一路點下去」的時候——呼叫端被迫知道整條物件導覽路徑的內部結構。
⚙️ 怎麼用(步驟 / 公式)
這味道是什麼徵兆:訊息鏈讓呼叫端緊緊耦合到物件之間的導覽結構——鏈中任何一環的關係改變,呼叫端就得跟著改。它洩漏了太多內部結構的細節。
通常用哪些重構手法對治:
- 隱藏委託關係(Hide Delegate):在鏈的前端物件上開一個方法,替呼叫端把後面的委託關係藏起來,呼叫端只需認識第一個物件。
- 提煉函式 + 搬移函式(Extract Function + Move Function):把「用這串鏈算出來的東西」抽成一個函式,再把它搬到鏈上更靠近資料的地方。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 別為了消滅每一個點號而把大量委託方法轉進中間物件,那會走向「中間人」味道——要拿捏。
- 流暢介面(fluent API)刻意的鏈式呼叫不是此味道。
🔗 相關工具
- 中間人 Middle Man(過度隱藏委託會走向另一極端)
- 內幕交易 Insider Trading(訊息鏈是模組間過度了解彼此結構的一種形式)
- 重構