SHOEISHA iD

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

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

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

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

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

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


「境界づけられたコンテキスト」とは

 ドメインの課題を解決する部分を「境界づけられたコンテキスト」と呼びます。IDDDでは、1つの「コアドメイン(もしくはサブドメイン)」に、1つの「境界づけられたコンテキスト」が対応している状態が最適だとされています。ただし、現実の(レガシー)システムでは、複数のドメインに対して1つの境界づけられたコンテキストしか存在しないケースも多々存在します。

複数の意味を持つドメイン用語

 ここでは、システムにおける言葉に注目してみましょう。例えば「アカウント」という言葉の場合、業種によって意味が異なってきます。

業種によって異なる「アカウント」の意味
業種 「アカウント」という用語の意味
会計システム 勘定科目
営業管理システム 顧客
コンピューターシステム ログイン権限

 続けて、同じ商品であってもタイミングで呼び名が変わる「ECサイト」の「商品」の例を見てみましょう。

ECサイトのタイミングに応じた「商品」の呼び名の変化
順番 「商品」の取り扱い状態 「商品」の呼び名
1 予約中 入荷待ち
2 入荷時 着荷品
3 販売中 在庫品
4 販売後 出庫品
5 トラブル発生時 不良品

 「取り扱い状態」の変化によって「商品」の呼び名が変わることがわかると思います。規模が大きいシステムでは、1つの言葉が複数の状態を兼ねてしまうこともあります。しかし、DDDではこのような巨大な「エンタープライズモデル」は設計しません。「アカウント」や「商品」という言語が、2つ以上の意味を持たないように「境界づけられたコンテキスト」を適切に分割し、プログラムの複雑化を防ぎます。

ユビキタス言語を明確にする「境界づけられたコンテキスト」

 前章(1章)にて述べた通り、DDDでは共通言語として「ユビキタス言語」を作り上げ、そのモデルに沿って実装します。そこで、ユビキタス言語の意味が変わる境界で「境界づけられたコンテキスト」を分割して管理します。DDDの「コンテキスト」は「企業や組織の文化」に近い意味を持ちます。つまり「境界づけられたコンテキスト」はユビキタス言語が複数の意味を持たないようにするための明示的な境界と言えます。この戦略的設計を適切に実行すると、異なる概念がドメインに混ざらないため、シンプルなシステムを構築できます。

「境界づけられたコンテキスト」の担当体制

 1つの「境界づけられたコンテキスト」は複数チームではなく、1つのチームだけで担当します。そのためドメインエキスパートは自分の裁量でユビキタス言語を定義し、シンプルなモデルを構築できます。逆に言えば「在籍する多数のドメインエキスパートで認識を統一することは容易ではない」という組織の特性が表れているともいえます。

「境界づけられたコンテキスト」と「ドメインモデル」の設計指針

 「境界づけられたコンテキスト」の分割を行う際は、アーキテクチャ、タスク分担、成果物などの影響を受けないように注意します。例えば、1つの「境界づけられたコンテキスト」が、1つのJARやDLLになるといった制限はありません。また「境界づけられたコンテキスト」に含まれるドメインモデルのクラス数や構成の目安も決まってません。

 ヴァーン氏はIDDD本でモーツァルトの映画のセリフを引用し『素晴らしいドメインモデルは、余計な音もなければ、足りない音もない。調和した交響曲のようなもの』と紹介しています。DDDのチームメンバーはドメインエキスパートによる言語的な境界に注目して、高度な技術と豊かな感性にて「境界づけられたコンテキスト」と「ドメインモデル」を洗練させていきます。

 次ページからは、IDDD本のサンプルを元に、「ドメイン」と「境界づけられたコンテキスト」の分割例について見ていきましょう。

次のページ
IDDD本の架空サンプルプロジェクト「SaaSOvation」

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

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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー