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