--- robots: noindex, nofollow tags: refactoring --- # Message Chains ![](https://i.imgur.com/kQcKEdY.png) ## 徵兆與症狀 你看到了類似 `a->b()->c()->d()` 的程式碼。 ## 出現原因 Client 請求另外一個物件,然後再請求下一個物件,然後再請求...。這表示 client 會倚賴這請求過程中遇到的所有物件,這些物件做了任何修改,client 都要做對應調整。。 ## 處理方法 - 使用 `Hide Delegate` 來解除這些委任關係。 - 或許更好的作法是思考,有沒有可能讓結果物件用 `Extract Function` 把依賴訊息的功能抽取出來,接著用 `Move Function` 把功能搬移到呼叫端。