メソッドの移動【リファクタリング】
状況
- メソッドが定義されているクラスの特性(変数やフィールド、オブジェクト)よりも、他のクラスの特性の方が利用・被利用回数が多い
例えば、口座種類ごとに手数料が決まっているにも関わらず、
手数料計算のメソッドが、口座種類ではなく口座クラスに紐づいている場合。
対処
- メソッドを適切なクラスへ移動する
メリット
メソッド、クラスの実装が単純になる
クラスの責務が明確になる
手順
元のメソッドが使う、元のクラスで定義された特性を調べる
元のクラスのサブクラスおよびスーパークラスで、元のメソッドが宣言されていないかを調べる
- 宣言されている場合、移動先でポリモーフィズムを全て表現できない限り、移動してはならない
移動先のクラスでメソッドを宣言する。メソッド名を変更しても構わない
元のメソッドから移動先にコードをコピーし、調整する
- メソッドが元のオブジェクトを使っている場合、合わせて移動する / 移動先から参照する / パラメータとして渡す など対応を考える
- メソッドに例外処理が含まれていて、その責務は元のクラスにある場合、例外処理は元のクラスに残す
移動先のクラスをコンパイルする
元のオブジェクトから移動先のオブジェクトを参照する適切な方法を決める
元のメソッドを委譲メソッドにする(移動先のメソッドを実行するように書き換える)
元のメソッドを削除する場合、このメソッドへの参照を全て移動先のメソッドへの参照に置き換える
コンパイルしてテストする
楽天ブックス: リファクタリング新装版 - 既存のコードを安全に改善する - マーチン・ファウラー - 9784274050190 : 本