IDDD本の架空サンプルプロジェクト「SaaSOvation」
それでは、IDDD本のサンプルプロジェクトを元に「ドメイン」と「境界づけられたコンテキスト」をどのように分割するかについて見ていきましょう。
「SaaSOvation」とは、IDDD本の中で登場するサンプルプロジェクトです。SaaSOvationは、「CollabOvation」と「ProjectOvation」という2つの製品から構成されます(「Ovation」という英語の意味は「喝采」で、スタンディングオベーションという言葉などで使われます)。
「CollabOvation」は、最先端のソーシャル機能を持つ企業向けの「Webコラボレーションスイート製品」です。フォーラム、カレンダー、Wiki、伝言板、文書管理、一斉通知、アクティビティ追跡などの機能が含まれます。これまで中心的に提供してきた製品で、すでに一定数の顧客も獲得できています。
「ProjectOvation」は「アジャイルプロジェクトの管理」を行う新しい製品です。Scrumを用いたプロジェクトマネージメントを行うことができます。バックログアイテムをスプリントに割り当てリリースを行います。バックログアイテムアイテムの見積もりにおいて「事業価値」を算出する機能を提供し「費用対効果」の分析を行える点が特徴です。
販売構想としては、「ProjectOvation」に「CollabOvation」をアドインとして組み込みます。プロジェクト管理ツールにコラボレーションツールを組み込むことで、チーム間の議論がスムーズになることが製品の強みと考えています。
「SaaSOvation」におけるドメイン分割例
早速、SaaSOvationにおいて「ドメイン」と「境界づけられたコンテキスト」をどのように管理するかをみてみましょう。

IDDD本では「ドメイン」と「境界づけられたコンテキスト」をそれぞれ3つに分離しています(よくある失敗として、DBやプログラムを共通化したほうが良いと判断して、1つのドメインにまとめてしまう場合があります。この場合、将来的に切り離せない複雑な構成となってしまいます)。それでは3つのドメインを見ていきましょう。
(1)コアドメイン「アジャイルプロジェクト管理ドメイン」
1つ目のドメインは「アジャイルプロジェクト管理ドメイン」で、開発を行う最重要ドメインとなります。そのため「コアドメイン」となり、ビジネス価値において重要な領域と判断しています。
「アジャイルプロジェクト管理ドメイン」のドメインモデルは上図の通りです。ドメインモデルを構成する要素(エンティティ、値オブジェクト、集約、ドメインイベント等)については、今後の章でご紹介しますので、今回はイメージだけ掴んで頂ければと思います。
(2)支援サブドメイン「コラボレーションドメイン」
2つ目のドメインが「コラボレーションドメイン」で「支援サブドメイン」となります。コアドメインから利用され、業務的に特別な意味を持つため支援サブドメインとなります。
なお「アジャイルプロジェクト管理ドメイン」が登場するまでは、「コラボレーションドメイン」が「コアドメイン」でした。このようにチームの置かれている状況によって「コアドメイン」が変化していくことがあります。
(3)汎用サブドメイン「認証・アクセスドメイン」
3つ目のドメインが「認証・アクセスドメイン」で「汎用サブドメイン」となります。ここでは、ユーザー、グループ、ロールなどを管理します。SaaSOvationのシステムにおいて必要な機能ですが、差し替えは可能なため、汎用サブドメインといえます。
「認証・アクセスコンテキスト(IdOvation)」という新しいドメインが登場した背景は、ユーザーやパーミションの概念が、コラボレーションコンテキストとはなんの関係もなく、ユビキタス言語にも含まれないことが理由です。
以上、サンプルプロジェクトの場合、ドメインと境界づけられたコンテキストが3つに分割されることがわかりました。続けて、この分割内容が正しいかを評価する方法について紹介していきます。
SaaSOvationのサンプルコード
SaaSOvationのサンプルコードは、GitHubにて公開されています。
Java版は「https://github.com/VaughnVernon/IDDD_Samples」に、
C#版は「https://github.com/VaughnVernon/IDDD_Samples_NET」に公開されています。
(なお、C#側はJava版に比べてインフラ系の実装が少ないため注意してください。)
