フェーズの分離
動機
1つのコードが異なる2つの処理を行っている場合、別々のモジュールに分離する方法がないか探す。
分離に力を咲くのは、トピックごとに分けて対処でき、両方を1度に頭に入れる必要がないから。
振る舞いを順次的な2段階のフェーズに分けるという方法がある。
処理を始める前に、入力をメイン処理に都合の良い形式に整形する。
手順
- 後半となるフェーズのコードを、関数として抽出する。
- テスト
- 抽出した関数に追加される引数として、中間データ構造を導入する。
- テスト
- 抽出した後半のフェーズの各パラメータを確認する。それらが前半のフェーズでも使われているなら、中間データ構造へと移す。1つ移すごとにテストする。 あるパラメータについては後半のフェーズで使うべきでないこともある。その場合は、そのパラメータを使用した結果を、中間データ構造のフィールドとして抽出する。その後「ステートメントの呼び出し側への移動」を施して、この中間データ構造に値を格納している行を移動する。
- 前半のフェーズのコードに「関数の抽出」を施し、中間データ構造を返すようにする。 前半のフェーズを変換オブジェクトとして抽出してもよい。