私はよくDDDを行うのですが、ドメインモデリングに関しては自己流で他人にいつも同じような説明をすることが多いため、
ここでまとめておこうと思います。
ドメインモデリングとは
DDDの潮流で語られる言葉で、ソフトウェアで解決したい領域であるドメインを整理、図示化(モデリング)したものです。
具体的には
- 業務用語
- 作業の順番
- 関係性の整理 (ex. 商品 -> 値段)
- 作業者
を整理します。
注意点として、必ずドメインエキスパート(業務経験者など解決したい領域に詳しい人)
ドメインモデリング実践
使うツールはmiroというホワイトボードツールを使用します。
https://miro.com/
step1: 業務フロー整理
miroのユーザーストーリーマッピング(User Story Map Framework)のテンプレートを使って、業務を整理していきます。
流れとしては以下です。
- ドメインエキスパートに時系列順に業務の内容を喋ってもらう。
- はじめに、大まかな流れを喋ってもらい (~をして、〜をして、〜する)青いカードに書く
- そのあとで詳しく小さな業務を喋ってもらい(~を入力する、~を〜に持っていく)黄色いカードに書く
- 下部の灰色の部分にメモを入れていく
書くときの注意点として、絶対に名詞と動詞は明確にわかるように書きましょう。つまり
決済する(動詞) 決済情報(名刺)
という形です。決済とだけ書かれると文脈で判断しなければならず、余計なコストがかかります。
step2: 関係性の整理
これで業務フローは分かりましたが、言葉が抽象的すぎるのでまだ関係性を明確に整理できたとは言えないです。
そのために名刺を抽出して
何が何を持っているか? (has-a)
何は何の派生か? (is-a)
という観点から情報分解していきましょう。
特に クレジットカード情報
といった xx情報は多様に解釈を含むので絶対に分解しましょう。
例として今回はクレジットカード情報という名刺を分解していきましょう。
まずはクレジットカードが持つ情報を整理しましょう。
クレジットカードなので、必ず番号はありますね。
あとは所有者の名前も入っています...といった形で
クレジットカードを構成する概念を書き出していきましょう。
私が試しに作ったものはこちらです。
こんな形で出てきた名刺ごとに情報の関係性を図示化していきます。
step3: チェック
step1,2が終われば関係の整理は完了しているので後はチェックです。
まず、システムの入出力を以下の観点でチェックします
- システムは何の情報を表示するのか?
- システムは何の情報を入力してもらうのか?
チェック方法は以下の通り
- 業務フローを時系列順で確認する。
- 確認、入力、表示といった動詞が出たら、目的語となる名詞を見つけドメイン図で保有する情報を確認する。
- システムの表示、入力の情報を全て保有しているかを確認する。
注意点ですが、 必ずしもドメイン図 = 入出力の情報とはなりません。
重要なことは、ドメイン図に存在しない入出力情報が存在するのか?、存在する場合はそれは正しいのか?を判断することです。
確認後にドメインエキスパートと見てもらうと良いと思います。
ex: tips
完全を求めない
初めから完全なドメインはできないので、ドメインモデリングの時間は1時間と決めて行ってください。そこから、不備やおかしい部分を改善しドメインを研ぎ澄ましていきましょう。
新規機能はどうするか?
新規機能の場合はそもそもワークフローがないので、自分でワークフローを組んで業務を行う予定の人と議論しながら、ドメインモデリングやワークフローを改善していきましょう。
最後に
ドメインからコードに落とす方法は別の機械に書きたいと思います。
それでは良いドメインモデリングを