【ソフト開発 アンチパターン】The Blob

Blobの意味

  • (どろっとした)かたまり,粒,滴,(インクの)染み
  • (ぼんやりした)影
  • (試合での)0点

f:id:yusuke_ujitoko:20161203161424p:plain:w400

どんな問題?

  • Blob

    • 以下の状態のときに発見される
      • 1つのクラスが処理を占有
      • 他のクラスはデータをカプセル化
    • このとき責任が1クラスに集約されるのが問題となる
    • オブジェクト指向言語で実装されたときでも,手続き指向になってしまう
  • 基本的な要因

    • 割当の失敗
    • iterativeな開発
      • proof-of-conceptのためのコードがプロトタイプとなり,製品版に搭載されるとき

症状と結果

  • 属性や操作が1つのクラスに集約されている
    • 60以上属性や操作があったらBlob確定
    • 無関係の属性や操作が集まっているとき
  • 1つの制御クラスがあるとき
    • 再利用やテストできない
    • メモリにロードするには高価すぎる
  • オブジェクト指向設計がないとき
  • レガシー設計がそのまま移植されているとき

どんなときに起きる?

どう解決する?

責任がBlobクラスに集中していたのが問題だった.
そのためリファクタリングして責任を分割する.

大事なのは振る舞いをBlobから引き離すこと.
そのステップは以下のようになる

  1. 関連する属性や操作をカテゴライズする
  2. カテゴライズしたものの,本来の場所を探して移動する
  3. カテゴライズできないものや,冗長なものを取り除く
  4. 派生クラスへの結びつきを,共通の基本クラスへ変更する
  5. おbジェクトに固有でない機能を,ふさわしいクラスへ移動する.

yusuke-ujitoko.hatenablog.com