ドメイン駆動設計 【DDD】 Domain-Driven Design
概要
ドメイン駆動設計(DDD)とは、ソフトウェア設計の方法論の一つで、ソフトウェアが取り扱う対象となる現実世界の領域(ビジネスドメイン)に注目し、その構造を忠実にプログラムコードに反映させていく手法。「ドメイン」(domain)とは領域、分野などの意味を持つ英単語だが、ここで言うドメインとは開発したソフトウェアが利用される業界や分野、事業、業務(あるいはこれらの総体)のことである。業務アプリケーションなどの開発に適用されるため「ビジネスドメイン」とも呼ばれる。
開発者は、ソフトウェアが利用される対象領域に熟達した「ドメインエキスパート」と共に当該ドメインを分析し、様々な対象や構造、操作などをソフトウェア上の概念として記述した「ドメインモデル」を作成する。開発者はモデルをプログラムのソースコードに忠実に反映させていく。
例えば、運送会社の情報システムを設計するのであれば、「顧客」「貨物」「経路」「輸送」といった概念がクラスやインスタンス、プロパティ、メソッドなどの形でソースコードに登場し、業務上のアクションとプログラム上の処理単位を対応付けながら開発を進めていく。
ドメインエキスパートはソフトウェア開発の知識を持たないことが前提となるため、開発者との対話を通じてドメイン知識のうちソフトウェアが取り扱う対象の取捨選択や概念の整理を行う。ドメインモデルは関係者全体で共通認識となる必要があり、UMLなどの図表を用いて理解のすり合わせを行う。
ドメイン知識の表現には「エンティティ」「値オブジェクト」「ドメインサービス」などの典型的なパターンを利用し、「集約」「仕様」などの概念を補助的に用いる。モデルに基づくアプリケーション構築の際には「リポジトリ」「アプリケーションサービス」「ファクトリ」などの手法が用いられる。
「ドメイン駆動設計」という用語および概念は、2003年に米ソフトウェア設計コンサルタント、エリック・エヴァンス(Eric Evans)氏が著書 “Domain-Driven Design: Tackling Complexity in the Heart of Software” (邦題:エリック・エヴァンスのドメイン駆動設計 - ソフトウェアの核心にある複雑さに立ち向かう)の中で提唱した。