Blobの意味
- (どろっとした)かたまり,粒,滴,(インクの)染み
- (ぼんやりした)影
- (試合での)0点
どんな問題?
Blob
- 以下の状態のときに発見される
- 1つのクラスが処理を占有
- 他のクラスはデータをカプセル化
- このとき責任が1クラスに集約されるのが問題となる
- オブジェクト指向言語で実装されたときでも,手続き指向になってしまう
- 以下の状態のときに発見される
基本的な要因
- 割当の失敗
- iterativeな開発
- proof-of-conceptのためのコードがプロトタイプとなり,製品版に搭載されるとき
症状と結果
- 属性や操作が1つのクラスに集約されている
- 60以上属性や操作があったらBlob確定
- 無関係の属性や操作が集まっているとき
- 1つの制御クラスがあるとき
- 再利用やテストできない
- メモリにロードするには高価すぎる
- オブジェクト指向設計がないとき
- レガシー設計がそのまま移植されているとき
どんなときに起きる?
- オブジェクト指向設計がないとき
- 設計者がオブジェクト指向設計を理解していないとき
- 開発者に抽象化スキルがないとき
- アーキテクチャがないとき
- コンポーネントの定義,相互作用の定義がないとき
- アーキテクチャの強制力がないとき
- 介入が多いとき
どう解決する?
責任がBlobクラスに集中していたのが問題だった.
そのためリファクタリングして責任を分割する.
大事なのは振る舞いをBlobから引き離すこと.
そのステップは以下のようになる
- 関連する属性や操作をカテゴライズする
- カテゴライズしたものの,本来の場所を探して移動する
- カテゴライズできないものや,冗長なものを取り除く
- 派生クラスへの結びつきを,共通の基本クラスへ変更する
- おbジェクトに固有でない機能を,ふさわしいクラスへ移動する.