原本
マーチン・ファウラー著「Refactoring(洋書)」
が所属するThoughtWorks社が公開している、リファクタリングの方法をカタログ化したもの
一部抜粋した一覧
適切な名前をつける
- シンボリック定数によるマジックナンバーの置き換え
- Replace Magic Number with Symbolic Constant
- メソッド名の変更
- Rename Method
- 説明用変更の導入
- Introduce Explaining Variable
- 一時変数の分離
- Split Temp
一時変数をなくす
- 一時変数のインライン化
- Inline Temp
- 問い合わせによる一時変数の置き換え
- Replace Temp with Query
- 制御フラグの削除
- Remove Control Flag
条件分岐をシンプルにする
- 条件記述の分解
- Decompose Conditional
- 重複した条件記述の断片の統合
- Consolidate Duplicate Conditional Fragments
- ガード説による入れ子条件記述の置き換え
- Replace Nested Conditional with Guard Clauses
- 条件記述の統合
- Consolidate Conditional Expression
- ヌルオブジェクトの導入
- Introduce Null Object
- ポリモーフィズムによる条件記述の置き換え
- Replace Conditional with Polymorphism
条件判定か例外か
- 例外によるエラーコードの置き換え
- Replace Error Code with Exception
- 条件判定による例外の置き換え
- Replace Exception with Test
オブジェクトを作る
- Factory Method によるコンストラクタの置き換え
- Replace Constructor with Factory Method
クラスやインタフェースを抜き出す
- クラスの抽出
- Extract Class
- クラスのインライン化
- Inline Class
- サブクラスの抽出
- Extract Subclass
- 階層の平坦化
- Collapse Hierarchy
- スーパークラスの抽出
- Extract Superclass
- インタフェースの抽出
- Extract Interface (カタログにない)
修正できないクラスにメソッドを追加する
- 外部メソッドの導入
- Introduce Foreign Method (カタログにない)
- 局所的拡張の導入
- Introduce Local Extension (カタログにない)
カプセル化
- フィールドのカプセル化
- Encapsulate Field
- 自己カプセル化フィールド
- Self-Encapsulate Field
- コレクションのカプセル化
- Encapsulate Collection
- ダウンキャストのカプセル化
- Encapsulate Downcast (カタログにない)
状況を変えるかどうか
- setメソッドの削除
- Remove Setting Method
- 問い合わせと更新の分離
- Separate Query from Modifier
フィールドの位置を整える
- フィールドの移動
- Move Field
- フィールドの引き下げ
- Push Down Field
- フィールドの引き上げ
- Pull Up Field
メソッドの位置を整える
- メソッドの移動
- Move Method
- メソッドの引き下げ
- Push Down Method
- メソッドの引き上げ
- Pull Up Method
- コンストラクタ本体の引き上げ
- Pull Up Constructor Body
メソッドを作る
- メソッドの隠蔽
- Hide Method (カタログにない)
- メソッドの抽出
- Extract Method
- メソッドのインライン化
- Inline Method
- アサーションの導入(表明の導入)
- Introduce Assertion
- アルゴリズムの取り換え
- Substitute Algorithm
- メソッドオブジェクトによるメソッドの置き換え
- Replace Method with Method Object
メソッドの引数を整える
- 引数の削除
- Remove Parameter
- 引数の追加
- Add Parameter
- パラメータへの代入の除去
- Remove Assignments to Parameters
- 明示的なメソッド群による引数の置き換え
- Replace Parameter with Explicit Methods
- メソッドのパラメータ化
- Parameterize Method
- オブジェクトそのものの受け渡し
- Preserve Whole Object
- メソッドによる引数の置き換え
- Replace Parameter with Method
- 引数オブジェクトの導入
- Introduce Parameter Object
タイプコードを置き換える
- クラスによるタイプコードの置き換え
- Replace Type Code with Class
- サブクラスによるタイプコードの置き換え
- Replace Type Code with Subclasses
- State/Strategyによるタイプコードの置き換え
- Replace Type Code with State/Strategy
- フィールドによるサブクラスの置き換え
- Replace Subclass with Fields
古いシステムへのオブジェクト指向を導入する
- オブジェクト指向による配列の置き換え
- Replace Array with Object (カタログにない)
- オブジェクトによるデータ値の置き換え
- Replace Data Value with Object
- データクラスによるレコードの置き換え
- Replace Record with Data Class
- 手続き的な設計からオブジェクトへの変換
- Convert Procedural Design to Objects (カタログにない)
値オブジェクトか参照オブジェクトか
- 値から参照への変更
- Change Value to Reference
- 参照から値への変更
- Change Reference to Value
モデルとビュー
- 観察されるデータの複製
- Duplicate Observed Data (カタログにない)
- プレゼンテーションとドメインの分離
- Separate Domain from Presentation
継承と移譲を切り替える
- 移譲による継承の置き換え
- Replace Inheritance with Delegation
- 継承による移譲の置き換え
- Replace Delegation with Inheritance (カタログにない)
移譲
- 移譲の隠蔽
- Hide Delegate
- 仲介人の除去
- Remove Middle Man
継承
- Template Methodの形成
- From Template Method (カタログにない)
- 継承の分割
- Tease Apart Inheritance (カタログにない)
- 階層の抽出
- Extract Hierarchy (カタログにない)
クラスの関連
- 双方向関連の単方向への変更
- Change bidirectional association to unidirectional (カタログにない)
- 単方向関連の双方向への変更
- Change unidirectional association to bidirectional (カタログにない)