『オブジェクトデザイン』読書メモ:第 3 章「オブジェクトを見つける」

これまでの分(第 1, 2 章)はこちら。

ここからは実際の設計作業についての章です。第 3 章「オブジェクトを見つける」では、責務駆動設計における分析からの候補オブジェクトの発見方法について説明しています。

3 オブジェクトを見つける

3.1 発見の戦略

  • 候補オブジェクト発見の流れ

    1. 設計ストーリーからの候補オブジェクトの抽出
    2. 複数候補のグループ分けと妥当性チェック
    3. ある程度見つかれば責務、コラボレーションの検討へ遷移
  • プロセスは柔軟、流動的に

※ここでの候補オブジェクトとは、実際のクラスなどを指しているわけではない。それよりもっと抽象的なものである。

3.2 オブジェクト、クラス、ロールを探す

  • はじめは具体的なオブジェクトの探索、責務割り当て、コラボレーション設計
  • オブジェクトとそれらの関係が判明するにしたがって抽象化
    • 同地域の複数オブジェクトに共通する性質を抽出
    • 継承、インターフェースなどを活用

3.3 なぜ設計ストーリーについて語るのか

  • 設計ストーリーを通して注力すべきテーマを抽出
  • 設計ストーリーとは以下の点について書いた文章
    • アプリケーションがやること
    • 設計について、これまでわかっていること
    • 設計する上で重要な点

3.4 設計の探索

  • 設計ストーリーから抽出したテーマを以下の作業に利用
    • そのテーマを実現するために必要な処理(観点)の発見
    • その処理を実現するために必要なロールの発見
    • そのロールからの候補オブジェクトの発見

3.5 名前には何が込められているのか

  • オブジェクトに適切な名前を付与することは重要
    • ロールと責務が推測しやすい名前
    • 適切な名前により設計を容易化
  • 命名のベストプラクティス
    • 引き受けるロールや責務が適切な粒度になる名前を付与
      • あるオブジェクトの名前が示す責務が広すぎるとき、オブジェクトを追加
    • 内容と名前の一致
      • 候補オブジェクトの仕事が変化すれば名前も変更
    • 既存のクラスと被る名前や省略した名前は避けて、わかりやすさを向上

3.6 候補を記述する

  • 候補オブジェクトの処理、保持する情報、コラボレートする相手、使用例を記述
  • 記述のベストプラクティスを紹介

3.7 候補を性格づける

  • ステレオタイプにより性格づけ
    • 情報保持役、サービス提供役、etc.
  • 以下の点からどのステレオタイプか判断
    • 受動的か能動的か
    • 所属する地域での役割
    • 引き受けるロールの性質

3.8 候補を結びつける

  • CRC カードの有効な使いかたを説明

3.9 共通の土台を探す

  • 以下の方法により候補オブジェクト群を洗練
    • 共通ロールのくくり出しによる新たな候補の発見
    • 複数候補の細かい違いを無視できるときは候補を統合

3.10 候補を残す根拠を述べ、他の候補を探す

  • 候補が以下に該当するときは破棄
    • 他のより優れた候補と責務が重複
    • 漠然としていて価値が不明
    • 当該アプリケーション外に存在すべきもの
    • 賢すぎ、過剰

参考文献

オブジェクトデザイン (Object Oriented SELECTION)

オブジェクトデザイン (Object Oriented SELECTION)