本記事はダグ・ローゼンバーグ著のユースケース駆動開発実践ガイドや、ネット上の人気記事を参考に書かせていただいています。
導入
ドメインモデリングとは?
- プロジェクト用語集、プロジェクト内で利用される用語をまとめた「生きるている」辞書
- 初期段階で完璧なものを作ることは不可能で、繰り返し議論し固めていく
何故ドメインモデリングが重要なのか?
- プロジェクトメンバー全員に明確な用語で問題領域を確実に理解させることができる
- プロジェクトのスコープを定義し、ユースケース作成の基盤とも成る
作成のためのガイドライン
ユースケース駆動開発実践ガイドで紹介されている、ドメインモデル作成のためのガイドラインを紹介します
作成のためのガイドライン
実践
1. 要求定義
ドメインモデル構築時にドメインクラスの抽出源として利用する情報源には、高い抽象度を持った要求が含まれています。
これらは「システムは〜しなければならない」「システムは〜すべきではない」という形式で記述されることが多いです。
では今回モデリングするシステムの要求を見ていきましょう。
システム要求
2. 用語抽出・整理
これらの要求から、強調された名刺や名詞句をリストにしていきます。
アカウントリスト名刺・名詞句リスト
クレジットカード
購入予定リスト
顧客
顧客アカウント
顧客評価
書籍
書籍一覧
書籍詳細
書籍レビュー
ショッピングカート
精算
タイトル
注文
著者
発注書
販売者
品目
編集者レビュー
ミニカタログ
ユーザーアカウント
レビューコメント
続いて抽出した名詞を整理していきます。
などなど。。名刺・名詞句リスト整理
3. モデリング
整理した名詞リストを元に、1回目のモデル図を書いていきます。
4. 集約関係(has-a)を記述
上記では既にhas-a
の関係を記述してありますが、全てが正しい状態ではありません。
正しいかどうかを判断する方法の1つに「◯が△を持っている」
と声に出して読み上げる、という方法があります。
「注文」は「精算」を「持っている」かどうか、を考えると、イマイチイメージしづらいことに気付くでしょう。
自然な関係を考えると、「顧客アカウント」が「注文履歴」を持っていて、「注文履歴」が「注文」を持っている、という関係に落ち着くでしょう。
また、「精算」は名詞ではなく動詞に近いので取り除きます。
また「著者」はクラスとしては小さすぎであり、「書籍」の属性に過ぎないので取り除きます。
5. 汎化関係(is-a)を記述
続いて汎化関係(is-a)について考えます。
まず「書籍一覧」について考えます。
「書籍一覧」についてユーザーのニーズを深堀っていくと、「購入予定リスト」の他に、「関連書籍」「推奨品リスト」「検索結果」などの言葉が存在することが分かりました。
汎化の関係を判断する方法の1つに「◯は△です」
と言葉に出す、という方法があります。
- 「購入予定リスト」は「書籍一覧」です。
- 「関連書籍」は「書籍一覧」です。
- 「推奨品リスト」は「書籍一覧」です。
- 「検索結果」は「書籍一覧」です。
この文章がしっくり来れば、それは汎化の関係と言えます。
6. 上記を反映する
上記を反映し、一部修正を加えたのが下記になります
これを元に実装やユースケース分析を進めていくわけですが、次以降のフェーズに取り組んでいる過程不自然な点が明らかになっていくと思われます。
そうした場合はまたドメインモデル図を修正し、反復的に改良していく、というサイクルを繰り返していきます。