技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

メソッドオブジェクトによるメソッドの置き換え【リファクタリング】

状況

  • 長いメソッドであり、「メソッドの抽出」を適用できないようなローカル変数の使い方がされている


対処

  • メソッド自身をオブジェクトとし、元のメソッドで定義されていたローカル変数を、そのオブジェクトのフィールドとする


メリット

  • 「メソッドの抽出」などを用いた、メソッドの分解が可能になる


手順

  • 新たなクラスを作成する

  • 新たなクラスに、元のオブジェクトを指す不変なフィールドと、一時変数およびパラメータに対応するフィールドを用意する

  • 新たなクラスに、上記不変なフィールドと、元のメソッドのパラメータを引数とするコンストラクタを用意する

  • 新たなクラスに、compute()というメソッドを用意する

  • 元のメソッドの本体をcompute()メソッドにコピーする。元のオブジェクトのメソッドを呼び出す際には、先ほど用意した不変なフィールドを使用する

  • コンパイルする

  • 元のメソッドは、新たなオブジェクトを生成し、compute()メソッドを呼ぶように置き換える


楽天ブックス: リファクタリング新装版 - 既存のコードを安全に改善する - マーチン・ファウラー - 9784274050190 : 本