パラメータオブジェクトの導入【リファクタリング】
状況
- 本来まとめて扱うべきひとまとまりのパラメータがある。
例えば、いくつかのメソッドに対して「開始日」と「終了日」をセットで渡している場合です。
対処
- まとめられるパラメータをオブジェクトに置き換える
例えば、「開始日」と「終了日」は「日付の範囲」とすることができます。
メリット
メソッドのパラメータリストを短くすることができる
パラメータの変更が簡単になる
オブジェクトにまとめたパラメータに対する処理が明確になるため、新たな「メソッドの抽出」対象が見えてくることもある
手順
置き換えようとしているパラメータ群を表現する新しいクラスを作成し、そのクラスを変更不可とする
コンパイルする
新しいクラスを使い、「パラメータの追加」を行う。呼び出し側で指定するパラメータは全てnullとする
元のパラメータのうち一つを削除して、オブジェクトの中身を使用するように処理を書き換える(メソッドの中でオブジェクトに対するgetterメソッドを使用するなど)
元のパラメータを削除するたびにコンパイルしてテストする。これを全てのパラメータを削除するまで行う
メソッド内部で行われるオブジェクトに対する振る舞い(例えばオブジェクトの中身を利用した条件分岐)に注目する。メソッド全体を移動しても問題ないのであれば「メソッドの移動」を、そうでない場合は「メソッドの抽出」を適用できないか検討する
楽天ブックス: リファクタリング新装版 - 既存のコードを安全に改善する - マーチン・ファウラー - 9784274050190 : 本