ドメイン駆動設計(DDD)
概要
ドメイン駆動設計(Domain-Driven Design, DDD)は、Eric Evans が提唱し、ソフトウェアの実装を 事業のドメイン(業務領域) と深く結びつける設計手法です。書籍『ドメイン駆動設計をはじめよう』(Vlad Khononov)は、実装と事業戦略を結びつける実践技法として、戦略的設計と戦術的設計の両面を扱います。
戦略的設計(Strategic Design)
事業の構造をどう分割し、チームをどう編成するか。
- ドメインとサブドメイン
- コアドメイン(Core):競争優位の源泉。最も投資すべき領域
- 補完サブドメイン(Supporting):コアを支える
- 汎用サブドメイン(Generic):既製品で代替可能(認証など)
- ユビキタス言語(Ubiquitous Language):開発者とドメインエキスパートが共有する統一言語
- 境界づけられたコンテキスト(Bounded Context):モデルが一貫して通用する境界
- コンテキストマップ:コンテキスト間の関係(連携・依存)を可視化
戦術的設計(Tactical Design)
ドメインモデルをどう実装するか。
- エンティティ(Entity):同一性(ID)で識別される
- 値オブジェクト(Value Object):値で識別され不変
- 集約(Aggregate):整合性の境界となるオブジェクトの塊
- ドメインイベント(Domain Event):ドメインで起きた事実
- リポジトリ / ファクトリ / ドメインサービス
アーキテクチャとの関係
境界づけられたコンテキストは ソフトウェアアーキテクチャ のサービス分割(マイクロサービス)やイベント駆動(ストリーミングシステム のドメインイベント)と密接に関係します。
関連ページ
参考資料
- ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法(Vlad Khononov)