技術向上

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

パラメータオブジェクトの導入【リファクタリング】

状況

  • 本来まとめて扱うべきひとまとまりのパラメータがある。


例えば、いくつかのメソッドに対して「開始日」と「終了日」をセットで渡している場合です。

対処

  • まとめられるパラメータをオブジェクトに置き換える


例えば、「開始日」と「終了日」は「日付の範囲」とすることができます。

メリット

  • メソッドのパラメータリストを短くすることができる

  • パラメータの変更が簡単になる

  • オブジェクトにまとめたパラメータに対する処理が明確になるため、新たな「メソッドの抽出」対象が見えてくることもある


手順

  • 置き換えようとしているパラメータ群を表現する新しいクラスを作成し、そのクラスを変更不可とする

  • コンパイルする

  • 新しいクラスを使い、「パラメータの追加」を行う。呼び出し側で指定するパラメータは全てnullとする

  • 元のパラメータのうち一つを削除して、オブジェクトの中身を使用するように処理を書き換える(メソッドの中でオブジェクトに対するgetterメソッドを使用するなど)

  • 元のパラメータを削除するたびにコンパイルしてテストする。これを全てのパラメータを削除するまで行う

  • メソッド内部で行われるオブジェクトに対する振る舞い(例えばオブジェクトの中身を利用した条件分岐)に注目する。メソッド全体を移動しても問題ないのであれば「メソッドの移動」を、そうでない場合は「メソッドの抽出」を適用できないか検討する


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