メソッドオブジェクトによるメソッドの置き換え【リファクタリング】
状況
- 長いメソッドであり、「メソッドの抽出」を適用できないようなローカル変数の使い方がされている
対処
- メソッド自身をオブジェクトとし、元のメソッドで定義されていたローカル変数を、そのオブジェクトのフィールドとする
メリット
- 「メソッドの抽出」などを用いた、メソッドの分解が可能になる
手順
新たなクラスを作成する
新たなクラスに、元のオブジェクトを指す不変なフィールドと、一時変数およびパラメータに対応するフィールドを用意する
新たなクラスに、上記不変なフィールドと、元のメソッドのパラメータを引数とするコンストラクタを用意する
新たなクラスに、compute()というメソッドを用意する
元のメソッドの本体をcompute()メソッドにコピーする。元のオブジェクトのメソッドを呼び出す際には、先ほど用意した不変なフィールドを使用する
コンパイルする
元のメソッドは、新たなオブジェクトを生成し、compute()メソッドを呼ぶように置き換える
楽天ブックス: リファクタリング新装版 - 既存のコードを安全に改善する - マーチン・ファウラー - 9784274050190 : 本