Message Chains

徵兆與症狀

你看到了類似 a->b()->c()->d() 的程式碼。

出現原因

Client 請求另外一個物件,然後再請求下一個物件,然後再請求。這表示 client 會倚賴這請求過程中遇到的所有物件,這些物件做了任何修改,client 都要做對應調整。。

處理方法

  • 使用 Hide Delegate 來解除這些委任關係。
  • 或許更好的作法是思考,有沒有可能讓結果物件用 Extract Function 把依賴訊息的功能抽取出來,接著用 Move Function 把功能搬移到呼叫端。