ファウラーの『リファクタリング』には、互いに矛盾するリファクタリングのペアがいくつかある。例えば、 - 「クラスの抽出」と「クラスのインライン化」 - 「値から参照への変更」と「参照から値への変更」 - 「単方向関連の双方向への変更」と「双方向関連の単方向への変更」 - 「委譲による継承の置き換え」と「継承による委譲の置き換え」 などがそうだ。 リファクタリングは、設計を改善するパターン、いわば小ワザを集めたものである。設計を改善するための小ワザが、互いに矛盾するというのは、不思議な気もする。 「継承を委譲に置き換えろ」というリファクタリングと、「委譲を継承に置き換えろ」というリファクタリングが、両方あるのだ。いったい、どっちにすればいいのだろうか。 継承と委譲というのは、それぞれの利点・欠点があって、どちらがいいというものではない。それぞれの利点・欠点があるのだから、局面によって、使い分