ドメイン駆動設計(Domain-driven design, DDD)とはソフトウェアの設計手法
「複雑なドメインの設計は、モデルベースで行うべき」であり、また「大半のソフトウェアプロジェクトでは、システムを実装するための特定の技術ではなく、ドメインそのものとドメインのロジックに焦点を置くべき」であるとする。
ドメイン駆動開発では、ドメインモデルを表現する要素として、下記のものを挙げている。
- エンティティ (参照オブジェクト): ドメインモデル内のオブジェクトであり、その属性によってではなく、連続性と識別性によって定義される。
- 値オブジェクト: 事物の特性を記述するオブジェクトである。特に識別する情報はなく、通例、読み出し専用のオブジェクトであり、Flyweight パターンを用いて共有できる。
- サービス: 操作がオブジェクトに属さない場合に、問題の自然な解決策として、操作をサービスとして実現することができる。サービスの概念は、GRASPにおいて"純粋人工物"と呼ばれるものである。
- リポジトリ:ドメインオブジェクトを取得するメソッドは、記憶域の実装を簡単に切り替えられるようにするため、専門のリポジトリオブジェクトに処理を委譲するべきである。
- ファクトリー : ドメインオブジェクトを生成するメソッドは、実装を簡単に切り替えられるようにするため、専門のファクトリーオブジェクトに処理を委譲するべきである。
ドメインモデル(Domain model)は、システムに関わるさまざまな実体とそれらの関係を説明するシステムの概念モデルである。
ドメインモデルは、システムの鍵となる概念と用語を文書化するために作成される。
ドメインモデルでは、システムの主要な実体とそれらの間の関係を明らかにし、一般にそれらの重要なメソッドと属性も洗い出す。
すなわち、このモデルは、システムの構造的な観点を提供し、通常はユースケースモデルで動的な観点を補足する。
ドメインモデルの重要な利点は、システムの範囲を明らかにすることである。
#html{{
table border="0" cellpadding="5"><tr><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798121967/vertex9-22/" target="_blank"><img src="" border="0"></a></td><td> </td><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798121967/vertex9-22/" target="_blank">エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)</a><br>エリック・エヴァンス<br>翔泳社<br>2011-04-09<br>¥ 5,720</td></tr></table>
hr>
}}
#html{{
table border="0" cellpadding="5"><tr><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/479813161X/vertex9-22/" target="_blank"><img src="" border="0"></a></td><td> </td><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/479813161X/vertex9-22/" target="_blank">実践ドメイン駆動設計 (Object Oriented SELECTION)</a><br>ヴァーン・ヴァーノン<br>翔泳社<br>2015-03-17<br>¥ 5,720</td></tr></table>
hr>
}}
#html{{
table border="0" cellpadding="5"><tr><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798161500/vertex9-22/" target="_blank"><img src="" border="0"></a></td><td> </td><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798161500/vertex9-22/" target="_blank">「実践ドメイン駆動設計」から学ぶDDDの実装入門 (CodeZine Digital First)</a><br>青木 淳夫<br>翔泳社<br>2019-05-31<br>¥ 3,080</td></tr></table>
hr>
}}
#html{{
table border="0" cellpadding="5"><tr><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/479815072X/vertex9-22/" target="_blank"><img src="" border="0"></a></td><td> </td><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/479815072X/vertex9-22/" target="_blank">ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本</a><br>成瀬 允宣<br>翔泳社<br>2020-02-13<br>¥ 3,520</td></tr></table>
hr>
}}