TL;DR
ドメインの概念を表したモデル。Martin Fowler の定義では、振る舞いとデータの両方を取り込んだ、ドメインのオブジェクトモデルである。
なぜ必要か
Fowler によると、ビジネスロジックは非常に複雑になりうる。規則やロジックが多くのケースや振る舞いを表し、オブジェクトはこの複雑さを扱うために作られた。
Domain Modeling Made Functional の第 1 章によると、問題を解くには関連する情報だけを取り入れるべきである。そこで、問題空間のドメインのモデル(ドメインモデル)を作り、ドメインの必要な側面だけを取り出して解決空間に作り直す。
仕組み
Fowler のドメインモデルは、互いにつながったオブジェクトの網であり、各オブジェクトは企業のように大きなものから注文書の 1 行のように小さなものまで、意味のある個体を表す。
Domain Modeling Made Functional では、関数型プログラミングで型を組み合わせてドメインモデルを作る。関数型のドメインモデルでは、データと振る舞いが分かれている。解決空間では、ドメインとサブドメインが境界づけられたコンテキストに対応し、それぞれのコンテキストがそれ自体小さなドメインモデルになる。
注意点
Domain Modeling Made Functional によると、ドメインモデルは永続性非依存で設計し、データベースなどの永続化の仕組みを意識しない。外部システムのモデルに合わせるとドメインモデルが腐敗するので、腐敗防止層を置いて守る。要件が変わったときは、コードより先にドメインモデルを見直す。