ドメイン駆動設計
2020年4月22日
ドメイン駆動設計は、ドメインのプロセスとルールを深く理解したドメインモデルをプログラミングすることに重点を置いたソフトウェア開発アプローチです。この名称は、このアプローチをパターンカタログを通して記述したエリック・エヴァンスの2003年の書籍に由来します。それ以来、実践者コミュニティがそのアイデアをさらに発展させ、さまざまな書籍やトレーニングコースを生み出してきました。このアプローチは、多くの複雑で煩雑なロジックを整理する必要がある複雑なドメインに特に適しています。
ソフトウェアシステムは、ドメインの十分に開発されたモデルに基づいている必要があるという考え方は、私がこの業界に携わっている期間と同じくらい前から存在しています。私はこの考え方の多くをジム・オデルから学びました。彼はデータモデリング、情報エンジニアリング、オブジェクト指向分析でこのスタイルの考え方を開発しました。基礎となるドメインを表現することは、1980年代と1990年代を通じて、データベースとオブジェクト指向コミュニティの多くの作業において重要な部分でした。
エリック・エヴァンスの偉大な貢献は、彼の著書を通して、このアプローチについて話すための語彙を開発し、当時議論を支配していたさまざまなモデリング表記を超えた重要な概念要素を特定したことです。その中心にあったのは、複雑なドメインのソフトウェアを開発するには、構築するソフトウェアシステムにドメイン用語を埋め込んだユビキタス言語を構築する必要があるという考えでした。多くの人がこのようなモデルの開発について話していましたが、それらはしばしば紙の上でのみ行われ、通常は事前に完了することが期待されていました。DDDは、ソフトウェア内でそれらを行い、ソフトウェア製品のライフサイクル中にそれらを進化させることを強調しています。エリックはエクストリームプログラミングの熱心な支持者であり、ドメイン駆動設計をエクストリームプログラミングアプローチの自然な構成要素と考えています。これは、私が知っているほとんどのXP実践者も共有する見解です。
この書籍は、エンティティ、値オブジェクト、サービスオブジェクトにオブジェクトを分類するという概念を紹介しました(私がエヴァンス分類と呼ぶもの)そしてアグリゲートの概念を特定しました。私はこれらが、プログラミング言語と図解表記の両方から逃れていたオブジェクトに関する考え方における重要なギャップを埋めていると感じました。DDDの特に重要な部分は、戦略的設計の概念です。つまり、大きなドメインをバウンデッドコンテキストのネットワークにどのように編成するかです。それまで、この問題に説得力のある方法で取り組んでいる人を見たことがありませんでした。
エリックのバックグラウンドはオブジェクト指向コミュニティに根ざしていますが、ドメイン駆動設計の中心的な概念は概念的なものであり、したがってどのようなプログラミングアプローチにも適用できます。これは、戦略的設計の側面に特に当てはまります。
さらに読む
エリックのオリジナル書籍は、読みづらい本であるという評判がありますが、私は正直に言って、その労苦に見合う価値があり、真剣な開発者の書棚に置く価値があると信じています。ヴォーン・バーノンの2013年の書籍は、その後の考え方を説明し、特に戦略的設計の側面に焦点を当てた、良い次のステップです。