要件定義とドメインモデリング
本記事の内容概要
(Uber eatsみたいな)オンラインフード注文・配達アプリ開発を例に下記の内容を説明します。
 ・業務分析のやり方(Event Strom)
 ・ドメインモデリング
 ・ドメイン、サブドメイン、コンテキストの判断方法
業務分析のやり方
DDD(ドメイン駆動設計)で一番重要なのは業務分析ですが、お客様と要件定義を行う際に下記の壁があります。
 ・お客様は自社業務に詳しいが、IT技術は何を実現できるかが分からない。
 ・SEはIT技術でどんなものを実現できるかが分かるが、お客様の業務が分からない。
そのため、どうお互い理解するかが重要となります。
DDDでは業務分析のやり方は以下となります。
 ① SEは積極的にお客様の業務(特に業務用語の意味)をできるだけ事前把握する。
 ② Event Stromでお客様との要件を聞き出す。
 ③ ドメインモデリングやUMLモデルを作成し、お客様と合意を取る。
 ④ ①~③を繰り返して、完成まで資料をブラッシュアップする。
イベントストーム(Event Strom)とは?
実際業務で起こっているイベントをベースにドメインモデリングをする方法です。
ポイント:
 ・ブレーンストーム(Brain Strom)会議
 ・業務専門家(顧客)、プロダクトマネージャー、開発専門家が参加
 ・業務で起こっているイベントを全部網羅すること
実際分析してみよう!
モデリング時に下記ツールを使用しています。(なんとこれにFree versionがあります!!)
Visual Paradigm Online : https://online.visual-paradigm.com/
・Event Stromでお客様との要件を聞き出す。
仮に今回アプリ開発についてBrain Strom会議の結果は以下のようになります。
※データベースモデリングするときに詳しく考えていきたいため、ユーザ情報(住所、名前、クレジットカードなど)、レストラン情報(場所、メニューなど)と配達員情報(名前など)は図に省略されています。

・ドメインイベントをまとめる
 
・ドメイン、サブドメイン、コンテキストを見極める
使用されている用語:
 ・問題領域:実際の顧客業務と起こっている問題のこと
 ・サブ問題領域:問題領域をブレイクダウンしたもの
 ・コンテキスト:サブ問題領域を中心にしたドメインモデル(単一責任の原則)
 ・コアドメイン:業務にとって重要なもの
 ・サブドメイン:コアドメインをサポートする業務
 ・汎用ドメイン:汎用的な業務
※見る視点によって、コアドメイン、サブドメイン、汎用ドメインが異なるため、顧客と十分やり取りをした後に合意する必要があります。

まとめ
本記事ではオンラインフード注文・配達アプリ開発を例にドメインモデリングをしてみました。
次回はこれをもとにマイクロサービス設計とイベント通知制御の設計をしようと思います。
