問い合わせと更新の分離【リファクタリング】
状況
- 一つのメソッドが値を返すと同時に、オブジェクトの状態を変更している
対処
- メソッドを分離する
メリット
メソッドの役割が明確になる
メソッドの再利用がしやすくなる
「問い合わせによる一時変数の置き換え」への障害が、一つ取り除かれる
手順
元のメソッドと同じ値を返す問い合わせメソッドを作成する
元のメソッドを修正し、新たに作成した問い合わせメソッドの戻り値を返すように修正する
- 元のメソッドで戻り値を返す部分を return getAmount() などのように置き換える
- 元のメソッドが一時変数を使用しており、その変数への代入が戻り値を取得している一箇所だけなら、その一時変数は削除できる(「一時変数のインライン化」)
コンパイルしてテストする
元のメソッドに対する呼び出しを、問い合わせメソッドの呼び出しに置き換える。そのメソッドに対する呼び出しの前に、元のメソッドに対する呼び出しを追加する
上記変更のたびにコンパイルしてテストする
元のメソッドの型を「戻り値を返さない型」に変更し、そのメソッドの中のreturnを削除する
楽天ブックス: リファクタリング新装版 - 既存のコードを安全に改善する - マーチン・ファウラー - 9784274050190 : 本