パンくず
リファクタリング-プログラマーの体質改善テクニック
オブジェクト間での特性の移動
内容
オブジェクト間での特性の移動
リファクタリング名 | 対象 | 対応 |
---|---|---|
メソッドの移動 | メソッドが、自分のクラスよりも他クラスの機能を使ったり、他クラスから利用されたりする。今はそうでなくても、そうなりつつある。 | メソッドをもっともよく使っているクラスに同じ内容の新メソッドを作る。古いメソッドは、このメソッドに処理を委ねるか、完全に取り除く。 |
フィールドの移動 | メソッドが、自分のクラスよりも他クラスの機能を使ったり、他クラスから利用されたりする。今はそうでなくても、そうなりつつある。 | ターゲットクラスに新しい属性リーダーを作り、フィールドを使っているコードを書き換える。 |
クラスの抽出 | 2つのクラスで行うべき仕事をしている1個のクラスがある。 | 新しいクラスを作成し、関連フィールド、メソッドを旧クラスから新クラスに移す。 |
クラスのインライン化 | クラスが大した仕事をしていない。 | すべての機能を他のクラスに移して、クラスを削除する。 |
委譲の隠蔽 | サーバに委譲を隠すためのメソッドを作る | クライアント側がサーバー側のパラメータについて知っていると両者の依存度が高くなります。サーバー側のオブジェくトを返却する小さい委譲メソッドを用意することで、この依存を無くすことが出来ます。 |
仲介人の除去 | クラスが単純な委譲をやり過ぎている。 | クライアントに委譲オブジェクトを直接呼び出させる。 |
外部メソッドの導入 | 利用中のサーバクラスにメソッドを追加する必要があるが、そのクラスを変更できない | クライアントクラスに、サーバクラスのインスタンスを第一引数に取るメソッドを作る |
局所的拡張の導入 | 利用中のサーバクラスにメソッドをいくつか追加する必要があるが、クラスを変更できない | それらの追加されるメソッドを備えた新たなクラスを作る。この拡張クラスは元のクラスのサブクラスまたはラッパーである |