「ドメイン」と「境界づけられたコンテキスト」の全体像
それでは、DDDにおける主要概念である「ドメイン」と「境界づけられたコンテキスト」について紹介していきます。広義の意味での「ドメイン」は「チームが取り組んでいる事業全体」を表します。このドメインの全体像が下図となります。
広義のドメインには「分析対象となる問題領域」と「事業課題の改善に取り組む解決領域」が含まれています。そして、分析対象となる問題領域が「ドメイン」であり、その問題や課題に取り組む解決領域が「境界づけられたコンテキスト」となります。
具体的な例は本稿の後半で紹介しますが、まずはビジネス課題を表す「ドメイン」と、その課題をソフトウェアにて解決する「境界づけられたコンテキスト」が存在することを理解して頂ければと思います。それでは、順番に見ていきましょう。
ドメインとは
ドメインとは対象とする事業が取り扱う世界を表しています。この世界には独自のルールと文化が存在しています。良い開発を行うためには、この世界をチームメンバーが深く理解する必要があります。しかし、すべての仕組みを理解するにはあまりにも大きく複雑すぎるため、通常は「コアドメイン」「サブドメイン」という適切な大きさに分割します。
「コアドメイン」と「サブドメイン」とは
「コアドメイン」とは事業的に最も重要で戦略的に不可欠な部分です。優秀なメンバーを参加させ、積極的に成長させビジネス的な差別化を図ります。DDDで開発を行う場合、十分に議論を行い、その部分が本当にコアドメインかどうかを確認する必要があります。コアドメインと定義した部分にビジネス的な強みが無い場合は、DDDで開発を行うかを再検討する必要があります。
そして「コアドメイン」ではない補助的な部分を「サブドメイン」と呼びます。サブドメインはコアドメインにとって必要な部分となります。なお、当事者の視点によって「コアドメイン」と「サブドメイン」が入れ替わることに注意します。例えばECとERPが含まれるシステムの場合、ERP構築企業の視点ではコアドメインはERPで、サブドメインがECとなります。逆にEC構築企業の視点ではコアドメインはECで、サブドメインがERPとなります。
「支援サブドメイン」と「汎用サブドメイン」とは
システム的に必要でありつつもコアドメインではない部分を「サブドメイン」と呼びます。サブドメインは「支援サブドメイン」と「汎用サブドメイン」の2種類に分類されます。
「支援サブドメイン」はコアドメインほど重要ではないものの、業務的に特別なものを表します。例えば、コアドメインの支援を行う独自機能などが該当します。
「汎用サブドメイン」は、業務的に特別ではないが、今回のシステムにおいて必要な箇所を表します。例えば認証機能やERPやECなど、極端な場合、交換されたとしても差し支えのない機能が該当します。