Bloaters

  • 長い関数(Long Method)
    オブジェクトそのものの受け渡し、関数の抽出、コマンドによる関数の置き換え、問い合わせによる一時変数の置き換え、条件記述の分解、パラメータオブジェクトの導入、ポリモーフィズムによる条件記述の置き換え、ループの分離
  • 巨大なクラス(Large Class)
    クラスの抽出、サブクスによるタイプコードの置き換え、スーパークラスの抽出
  • データの群れ(Data Clumps)
    オブジェクトそのものの受け渡し、クラスの抽出、パラメータオブジェクトの導入
  • 長いパラメータリスト(Long Parameter List)
    オブジェクトそのものの受け渡し、関数群のクラスへの集約、問い合わせによるパラメータの置き換え、パラメータオブジェクトの導入、フラグパラメータの削除
  • 基本データ型への執着(Primitive Obsession)
    オブジェクトによるプリミティブの置き換え、クラスの抽出、サブクラスによるタイプコードの置き換え、パラメータオブジェクトの導入、ポリモーフィズムによる条件記述の置き換え

Tool Abusers

  • Switch Statements
  • 相続拒否(Refused Bequest)
    委譲によるサブクラスの置き換え、委譲によるスーパークラスの置き換え、フィールドの押し下げ、メソッドの押し下げ
  • クラスのインターフェース不一致(Alternative Classes w/ Different Interfaces)
    関数宣言の変更、関数の移動、スーパークラスの抽出
  • 一時的属性(Temporary Field)
    関数の移動、クラスの抽出、特殊ケースの導入

Change Preventers

Dispensables

  • Lazy Class
  • 疑わしき一般化(Speculative Generality)
    関数宣言の変更、関数のインライン化、クラス階層の平坦化、クラスのインライン化、デッドコードの削除
  • データクラス(Data Class)
  • 重複したコード(Duplicated Code)
    関数の抽出、ステートメントのスライド、メソッドの引き上げ

Couplers


  • Coment(コメント)
    アサーションの導入、関数宣言の変更、関数の抽出
  • Mysterious Name(不可思議な名前)
    関数宣言の変更、フィールド名の変更、変数名の変更
  • Global Data(グローバルなデータ)
    変数のカプセル化
  • Mutable Data(変更可能なデータ)
    setter の削除、関数群のクラスへの集約、関数群の変換への集約、関数の抽出、参照から値への変更、ステートメントのスライド、問い合わせと更新の分離、問い合わせによる導入変数の置き換え、変数のカプセル化、変数の分離
  • Divergent Change(変更の偏り)
  • Repeated Switches(重複したスイッチ文)
    ポリモーフィズムによる条件記述の置き換え
  • Loop(ループ)
    パイプラインによるループの置き換え
  • Lazy Element(怠け者要素)
    関数のインライン化、クラス階層の平坦化、クラスのインライン化
  • Insider Trading(インサイダー取引)
    委譲によるサブクラスの置き換え、委譲によるスーパークラスの置き換え、委譲の隠匿、関数の移動、フィールドの移動