ドメイン駆動設計とは? †
- ドメイン駆動設計 - Wikipedia https://ja.wikipedia.org/?curid=1826188
ドメイン駆動設計(Domain-driven design, DDD)とはソフトウェアの設計手法
「複雑なドメインの設計は、モデルベースで行うべき」であり、また「大半のソフトウェアプロジェクトでは、システムを実装するための特定の技術ではなく、ドメインそのものとドメインのロジックに焦点を置くべき」であるとする。
ドメイン駆動開発では、ドメインモデルを表現する要素として、下記のものを挙げている。
- エンティティ (参照オブジェクト): ドメインモデル内のオブジェクトであり、その属性によってではなく、連続性と識別性によって定義される。
- 値オブジェクト: 事物の特性を記述するオブジェクトである。特に識別する情報はなく、通例、読み出し専用のオブジェクトであり、Flyweight パターンを用いて共有できる。
- サービス: 操作がオブジェクトに属さない場合に、問題の自然な解決策として、操作をサービスとして実現することができる。サービスの概念は、GRASPにおいて"純粋人工物"と呼ばれるものである。
- リポジトリ:ドメインオブジェクトを取得するメソッドは、記憶域の実装を簡単に切り替えられるようにするため、専門のリポジトリオブジェクトに処理を委譲するべきである。
- ファクトリー : ドメインオブジェクトを生成するメソッドは、実装を簡単に切り替えられるようにするため、専門のファクトリーオブジェクトに処理を委譲するべきである。
- ドメインモデル - Wikipedia https://ja.wikipedia.org/?curid=1548253
ドメインモデル(Domain model)は、システムに関わるさまざまな実体とそれらの関係を説明するシステムの概念モデルである。
ドメインモデルは、システムの鍵となる概念と用語を文書化するために作成される。
ドメインモデルでは、システムの主要な実体とそれらの間の関係を明らかにし、一般にそれらの重要なメソッドと属性も洗い出す。
すなわち、このモデルは、システムの構造的な観点を提供し、通常はユースケースモデルで動的な観点を補足する。
ドメインモデルの重要な利点は、システムの範囲を明らかにすることである。
公式サイト †
- Domain Language https://domainlanguage.com/
- Eric Evansさん (@ericevans0) / Twitter https://twitter.com/ericevans0
リファレンス / チュートリアル †
- IDDD本から理解するドメイン駆動設計連載一覧:CodeZine(コードジン)
https://codezine.jp/article/corner/655
- 第1章「DDDへの誘い」~ドメイン駆動設計のメリットと始め方(2016/08/01)
https://codezine.jp/article/detail/9546 - 第2章「ドメイン」「サブドメイン」「境界づけられたコンテキスト」を読み解く(2016/11/08)
https://codezine.jp/article/detail/9744 - 第3章「コンテキストマップ」~「境界づけられたコンテキスト」の関係を俯瞰する地図~(2016/12/16)
https://codezine.jp/article/detail/9837 - 第4章「アーキテクチャ」~レイヤからヘキサゴナルへ~(2017/01/30)
https://codezine.jp/article/detail/9922 - 第5章「エンティティ」~一意な識別子で同一性を識別~(2017/04/07)
https://codezine.jp/article/detail/10038 - 第6章「値オブジェクト」~振る舞いを持つ不変オブジェクト~(2017/06/02)
https://codezine.jp/article/detail/10184 - 第7章「ドメインサービス」~複数の物を扱うビジネスルール~(2017/07/31)
https://codezine.jp/article/detail/10318 - 第8章「ドメインイベント」~出来事を記録して活用~(2017/09/13)
https://codezine.jp/article/detail/10392 - 第9章「モジュール」~高凝集で疎結合にまとめる~(2018/02/22)
https://codezine.jp/article/detail/10651 - 第10章「集約」~トランザクション整合性を保つ境界~(2018/04/16)
https://codezine.jp/article/detail/10776 - 第11章「ファクトリ」~複雑な生成をユビキタス言語でシンプルに~(2018/06/26)
https://codezine.jp/article/detail/10903 - 第12章「リポジトリ」~集約の永続化管理を担当~(2018/09/10)
https://codezine.jp/article/detail/11048 - 第13章「境界づけられたコンテキストの統合」~分散システム設計~(2018/11/01)
https://codezine.jp/article/detail/11178 - 第14章「アプリケーション」~ドメインモデルを利用するクライアント~(2018/11/21)
https://codezine.jp/article/detail/11221
ライブラリー / フレームワーク †
Tips †
- ドメイン駆動設計の用語と解説(抜粋版) - Qiita https://qiita.com/nunulk/items/84438605eb4d75dbef00
- 現場で役立つシステム設計の原則メモ - Qiita https://qiita.com/u_nation/private/75cf7b06235fb646714d
参考書 †
エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践) エリック・エヴァンス 翔泳社 2011-04-09 ¥ 5,720 |
実践ドメイン駆動設計 (Object Oriented SELECTION) ヴァーン・ヴァーノン 翔泳社 2015-03-17 ¥ 5,720 |
「実践ドメイン駆動設計」から学ぶDDDの実装入門 (CodeZine Digital First) 青木 淳夫 翔泳社 2019-05-31 ¥ 3,080 |
- 書評 ドメイン駆動設計入門
ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本 成瀬 允宣 翔泳社 2020-02-13 ¥ 3,520 |