Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

書籍 リファクタリング−プログラマーの体質改善 | データの再編成

内容

データの再構成
リファクタリング 対象 対応
自己カプセル化フィールド フィールドに直接アクセスしているが、フィールドとの密結合が不都合になってきている フィールドのゲッター/セッターを作り、フィールドにアクセスするときにはそれらだけを使う
オブジェクトによるデータ値の置き換え 追加のデータや振る舞いが必要なデータ項目がある データ項目をオブジェクトに書き換える
値から参照への変更 同じインスタンスが多数存在するクラスがある。それらを一つのオブジェクトに置き換えたい そのオブジェクトを参照オブジェクトに変える
参照から値への変更 小さくて不変でコントロールしにくい参照オブジェクトを持っている そのオブジェクトを値オブジェクトに変える
オブジェクトによる配列の置き換え 配列の各要素が、それぞれ異なる意味を持っている 配列を要素ごとに対応したフィールドを持つオブジェクトに置き換える
観察されるデータの複製 あるGUIコントロールでのみ有効なドメインデータがあり、ドメインメソッドからもアクセスする必要がある。 そのデータをドメインオブジェクトにコピーして、それらを同期させるためのオブザーバを設ける
単方向関連の双方向への変更 互いのメンバを使わなければならない2つのクラスがあるが、片方向のリンクしかない バックポインタを追加し、両方のポインタを書き換えるように更新メソッドを書き換える
双方向関連の単方向への変更 双方向リンクを作ってあるが、片方のクラスがもう片方のクラスのメンバを使わなくなった 不要なリンクを取り除く
シンボリック定数によるマジックナンバーの置き換え 特定の意味を持つリテラルの数値が使われている 定数を作り、意味に基づいて名前を与え、数値の代わりに使う
フィールドのカプセル化 公開フィールドがある それを非公開にして、そのアクセサを用意する ※Javaのみ
コレクションのカプセル化 メソッドがコレクションを返している メソッドにはコレクションのコピーを返させるようにして、add_、remove_メソッドを用意する
データクラスによるレコードの置き換え 旧来のプログラミング環境のレコード構造とのインターフェイスが必要になっている レコードのために、データオブジェクトを作る
クラスによるタイプコードの置き換え 振る舞いに影響しない数字のタイプコードを持つクラスがある その数字を新しいクラスで置き換える
サブクラスによるタイプコードの置き換え クラスのふるまいに影響を与えるタイプコードが使われている タイプコードをクラスに書き換える。タイプコードの値1つに1つのクラスを作る
State・Strategyによるタイプコードの置き換え クラスのふるまいに影響を与えるタイプコードが使われており、タイプコードは実行時に変更される タイプコードをState/Strategyオブジェクトに取り換える
フィールドによるサブクラスの置き換え 定数を返すメソッド以外に違いのないサブクラスがある メソッドスーパークラスのフィールドに変えて、サブクラスを取り除く