https://martinfowler.com/bliki/BoundedContext.html

境界づけられたコンテキスト(Bounded Context)は、ドメイン駆動設計の重要なパターンです。 DDDの戦略的設計は大規模なモデルやチームを扱うことに焦点をあてています。 DDDは、大規模なモデルを扱うとき、モデルを異なる境界づけられたコンテキストに分割し、コンテキストの相互関係を明示します。

境界づけられたコンテキスト

DDDは、底にあるドメインのモデルに基づいてソフトウェアを設計することです。 モデルはユビキタス言語として機能し、ソフトウェア開発者とドメインエキスパート間のコミュニケーションの手助けをします。 また、ソフトウェア自体の設計の概念的基盤としても機能します ー ソフトウェアがオブジェクトや機能にどのように噛み砕かれるかです。 効果的にするには、モデルが統制をとれている必要があります ー モデルを内部的に一貫させ、矛盾がないようにする必要があります。

大きなドメインをモデル化しようとすればするほど、次第に単一の統一的なモデルを構築することが難しくなります。 大規模な組織の中の異なる部署の人は微妙に異なる言葉を使います。 モデリングの正確さはすぐにこれにぶつかり、多くの場合、混乱を招きます。 通常、この混乱はドメインの主な関心事に焦点を当てています。 キャリアの早い段階で、私は電力会社で働いていました ー ここで “meter” という言葉は、組織の中の異なる部署で微妙に異なる意味を持っていました:それは、配電網と地点との接続、配電網と顧客との接続、物理的なメーター自体(故障が発生した場合は交換できる)でした。[*訳注1] これらの微妙な多義語は、会話ではスムーズに区別ができますが、正確なコンピューターの世界ではスムーズに区別できません。 「顧客」や「製品」などの多義語で何度も何度もこの混乱が繰り返されるのを見てきました。

以前、私たちはビジネス全体の統一モデルを構築するようにアドバイスされていましたが、我々が「大規模システムのドメインモデルを完全に統合することは現実的ではない、費用対効果が高くない」ことを学んだことをDDDはきちんと認識しています[*1]。 したがって、DDDではその代わりに大規模なシステムを境界づけられたコンテキストに分割します。各コンテキストは、統一されたモデルを持つことができます。これは、基本的に、複数の正規化モデルを構造化する方法です。

境界づけられたコンテキストたちには、別々な概念(カスタマーサポートコンテキストにのみ存在するサポートチケットなど)と共有概念(製品や顧客など)の両方があります。 異なるコンテキストは、統合のために多義的な概念をマッピングする機構を備えた、全く異なった共有概念のモデルを持っている場合があります。[*訳注2] いくつかのDDDのパターンは、コンテキスト間の代替関係を探ります。

多くの要因がコンテキスト間の境界を描きます。 人間の文化は通常の場合、有力な候補の一つです。モデルはユビキタス言語として機能するため、言語が変わる場合は別のモデルが必要になります。 また、同じドメインコンテキスト内にも複数のコンテキストがあります。同一アプリケーションでのメモリ内モデルとリレーショナルデータベースモデルの分離などがその例です。 この境界は、モデルを表現するさまざまな方法で設定されます。

DDDの戦略的設計は、境界づけられたコンテキスト間が持つ関係をさまざまな方法を説明し続けています。 通常、コンテキストマップを使用して描写することは役立ちます。

合わせて読みたい

DDDの正規のソースは、Eric Evans本です。ソフトウェアの文献の中では簡単な本ではありませんが、かなりの投資をしてでも読む価値が十分にある本の1つです。境界づけられたコンテキストはパートIV(戦略的設計)に記載があります。

Vaughn Vernonの実践ドメイン駆動設計は、本の最初から戦略的設計に焦点を当てています。第2章では、ドメインがどのように境界づけられたコンテキストに分割されるかについて詳しく説明しており、第3章はコンテキストマップを描画するための最良の情報源です。

私は古典でありながら、まだ有用なソフトウェアの本が大好きです。私のお気に入りのそのような本の1つは、William Kentのデータと現実です。”Oil Wells”の多義語についての彼の短い説明を今でも覚えています。

Eric Evansは、境界づけられたコンテキストを明示的に使用することで、チームがバブルコンテキストを使用してレガシーなシステムに新しい機能を追加できるようにする方法について説明しています。 この例は、関連する境界づけられたコンテキストがどのように類似しているが異なるモデルを持っているか、そしてそれらの間でどのようにマッピングできるかを示しています。

注釈

*1: ドメイン駆動設計のEric Evans

訳注

*訳注1: 配電網はこちらのリンクの図が参考になりました。「配電網と地点との接続」は工事担当の部署が使用する言葉なのかなと思います、おそらく「地点」は変電所などを指していて、工事が完了して通電が完了するとメーターが動き始めるので「メーター」と使用しているのかなと思います。「配電網と顧客との接続」は顧客対応を行う部署が使用する言葉なのかなと思います、こちらも先ほどと同じですが、配電網のうち末端に近いものを指していると思います。

*訳注2: 「異なるコンテキストの中で同じ「製品」「顧客」という言葉で全く異なるモデルを持っている場合があり、その上で、異なるコンテキスト同士でマッピングする機構を備えている」ということだと思います。

translated by @okaponta