Bloaters#
- 長い関数(Long Method)
オブジェクトそのものの受け渡し、関数の抽出、コマンドによる関数の置き換え、問い合わせによる一時変数の置き換え、条件記述の分解、パラメータオブジェクトの導入、ポリモーフィズムによる条件記述の置き換え、ループの分離
- 巨大なクラス(Large Class)
クラスの抽出、サブクスによるタイプコードの置き換え、スーパークラスの抽出
- データの群れ(Data Clumps)
オブジェクトそのものの受け渡し、クラスの抽出、パラメータオブジェクトの導入
- 長いパラメータリスト(Long Parameter List)
オブジェクトそのものの受け渡し、関数群のクラスへの集約、問い合わせによるパラメータの置き換え、パラメータオブジェクトの導入、フラグパラメータの削除
- 基本データ型への執着(Primitive Obsession)
オブジェクトによるプリミティブの置き換え、クラスの抽出、サブクラスによるタイプコードの置き換え、パラメータオブジェクトの導入、ポリモーフィズムによる条件記述の置き換え
- Switch Statements
- 相続拒否(Refused Bequest)
委譲によるサブクラスの置き換え、委譲によるスーパークラスの置き換え、フィールドの押し下げ、メソッドの押し下げ
- クラスのインターフェース不一致(Alternative Classes w/ Different Interfaces)
関数宣言の変更、関数の移動、スーパークラスの抽出
- 一時的属性(Temporary Field)
関数の移動、クラスの抽出、特殊ケースの導入
Change Preventers#
Dispensables#
- Lazy Class
- 疑わしき一般化(Speculative Generality)
関数宣言の変更、関数のインライン化、クラス階層の平坦化、クラスのインライン化、デッドコードの削除
- データクラス(Data Class)
- 重複したコード(Duplicated Code)
関数の抽出、ステートメントのスライド、メソッドの引き上げ
Couplers#
- 特性の横恋慕(Feature Envy)
関数の移動、関数の抽出
- Inappropriate Intimacy
- メッセージの連鎖(Message Chains)
委譲の隠蔽、関数の移動、関数の抽出
- 仲介人(Middle Man)
関数のインライン化、仲介人の除去
- Coment(コメント)
アサーションの導入、関数宣言の変更、関数の抽出
- Mysterious Name(不可思議な名前)
関数宣言の変更、フィールド名の変更、変数名の変更
- Global Data(グローバルなデータ)
変数のカプセル化
- Mutable Data(変更可能なデータ)
setter の削除、関数群のクラスへの集約、関数群の変換への集約、関数の抽出、参照から値への変更、ステートメントのスライド、問い合わせと更新の分離、問い合わせによる導入変数の置き換え、変数のカプセル化、変数の分離
- Divergent Change(変更の偏り)
- Repeated Switches(重複したスイッチ文)
ポリモーフィズムによる条件記述の置き換え
- Loop(ループ)
パイプラインによるループの置き換え
- Lazy Element(怠け者要素)
関数のインライン化、クラス階層の平坦化、クラスのインライン化
- Insider Trading(インサイダー取引)
委譲によるサブクラスの置き換え、委譲によるスーパークラスの置き換え、委譲の隠匿、関数の移動、フィールドの移動