Message Chains
兆候と症状 a-> b()-> c()-> d()というような一連のメソッド呼び出し
問題の理由 Message Chainsは、クライアントが別のオブジェクトを要求し、そのオブジェクトがさらに別のオブジェクトを要求したときなどに発生します。このような関係の変更には、クライアントの変更が必要です。
対処 Message Chainsを削除するには、「Hide Delegate」を使用します。
Message Chainsの終端のオブジェクトが使用されている理由を考える方が良い場合があります。おそらく、この機能に「Extract Method」を使用し、「Move Method」を使用してチェーンの先頭に移動するのが理にかなっています。
効果
- クラス間の依存関係を減らすことができます。
- コードのバルクを削減できます。
When to Ignore Hide Delegateしすぎた結果、実際に処理が行われる場所の確認が難しくなることがあります。言い方を変えると、Middle ManのCode Smellも避けてください。
書籍としてはこの辺りが参考になると思います。
リファクタリング第2版
レガシーコード改善ガイド
