SHOEISHA iD

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

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

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

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

 ドメイン駆動設計(DDD)は、顧客と開発者が業務を戦略的に理解し、共通の言葉を用いてシステムを発展させていく開発手法です。第1回となる前回は「DDDの概要」「ユビキタス言語」「DDDを始める方法」について紹介しました。第2回となる本稿では「戦略的設計」において重要な概念「ドメイン」「サブドメイン」「境界づけられたコンテキスト」について紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

「ドメイン」と「境界づけられたコンテキスト」の全体像

 それでは、DDDにおける主要概念である「ドメイン」と「境界づけられたコンテキスト」について紹介していきます。広義の意味での「ドメイン」は「チームが取り組んでいる事業全体」を表します。このドメインの全体像が下図となります。

コアドメイン、サブドメイン、境界づけられたコンテキストの全体像
コアドメイン、サブドメイン、境界づけられたコンテキストの全体像

 広義のドメインには分析対象となる問題領域」と「事業課題の改善に取り組む解決領域」が含まれています。そして、分析対象となる問題領域が「ドメイン」であり、その問題や課題に取り組む解決領域が「境界づけられたコンテキスト」となります。

 具体的な例は本稿の後半で紹介しますが、まずはビジネス課題を表す「ドメイン」と、その課題をソフトウェアにて解決する「境界づけられたコンテキスト」が存在することを理解して頂ければと思います。それでは、順番に見ていきましょう。

ドメインとは

 ドメインとは対象とする事業が取り扱う世界を表しています。この世界には独自のルールと文化が存在しています。良い開発を行うためには、この世界をチームメンバーが深く理解する必要があります。しかし、すべての仕組みを理解するにはあまりにも大きく複雑すぎるため、通常は「コアドメイン」「サブドメイン」という適切な大きさに分割します。

「コアドメイン」と「サブドメイン」とは

 「コアドメイン」とは事業的に最も重要で戦略的に不可欠な部分です。優秀なメンバーを参加させ、積極的に成長させビジネス的な差別化を図ります。DDDで開発を行う場合、十分に議論を行い、その部分が本当にコアドメインかどうかを確認する必要があります。コアドメインと定義した部分にビジネス的な強みが無い場合は、DDDで開発を行うかを再検討する必要があります。

 そして「コアドメイン」ではない補助的な部分を「サブドメイン」と呼びます。サブドメインはコアドメインにとって必要な部分となります。なお、当事者の視点によって「コアドメイン」と「サブドメイン」が入れ替わることに注意します。例えばECとERPが含まれるシステムの場合、ERP構築企業の視点ではコアドメインはERPで、サブドメインがECとなります。逆にEC構築企業の視点ではコアドメインはECで、サブドメインがERPとなります。

「支援サブドメイン」と「汎用サブドメイン」とは

 システム的に必要でありつつもコアドメインではない部分を「サブドメイン」と呼びます。サブドメインは「支援サブドメイン」と「汎用サブドメイン」の2種類に分類されます。

 「支援サブドメイン」はコアドメインほど重要ではないものの、業務的に特別なものを表します。例えば、コアドメインの支援を行う独自機能などが該当します。

 「汎用サブドメイン」は、業務的に特別ではないが、今回のシステムにおいて必要な箇所を表します。例えば認証機能やERPやECなど、極端な場合、交換されたとしても差し支えのない機能が該当します。

次のページ
「境界づけられたコンテキスト」とは

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
IDDD本から理解するドメイン駆動設計連載記事一覧

もっと読む

この記事の著者

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

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9744 2018/11/13 12:52

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング