SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IDDD本から理解するドメイン駆動設計

実践DDD本 第2章「ドメイン」「サブドメイン」「境界づけられたコンテキスト」を読み解く

IDDD本から理解するドメイン駆動設計 第2回


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版に比べてインフラ系の実装が少ないため注意してください。)

次のページ
分割した「ドメイン」と「境界づけられたコンテキスト」の評価方法

この記事は参考になりましたか?

IDDD本から理解するドメイン駆動設計連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9744 2018/11/13 12:52

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー