エリックエバンスのドメイン駆動設計の「第14章 モデルの整合性を維持する」まとめ

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計

今回は、「第14章 モデルの整合性を維持する」のまとめです。

概要

ドメインモデルに対する最も根本的な要件は、用語の意味が常に同じであることであり、矛盾したルールが含まれていないことです。

エンタープライズシステム全体のドメインモデルに対する根本的な要件を満たすことは、現実的ではないし、コストにも見合わないと考えられます。

ただ、現実的ではなくても、何を統一すべきか/何を統一しないでおくべきかを意思決定して、置かれている状況に関する全体像を共有できるようにします。

この全体像があれば、確実に統一したい部分を統一する方向に向けつつ、統一しない部分のせいで混乱や破綻が生じないようにできます。

この章で説明することは、ドメインモデルの境界や他ドメインモデルとの関係性を認識し、伝達し、選択するためのテクニックです。

まず、境界づけられたコンテキストによって、各ドメインモデルを適用できる範囲が定義され、コンテキストマップによって、プロジェクトのコンテキストと、それらコンテキスト間の関係性を全体的に見渡せることができます。

次に、継続的な統合のプロセスによってモデルの統一性が保たれます。

最後に、これらが安定することによってコンテキスト同士を関係づけるためのより効果的な戦略へと移行できます。

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

複数ドメインモデルに基づくコードが組み合わされると、バグの温床となり信頼できなくなり、理解しにくくなり、最後にチームメンバ間のコミュニケーションは混乱し始めます。

そのため、ドメインモデルが適用されるコンテキストを定義する必要があります。

コンテキストの境界は、

  • チーム編成

  • アプリケーションが持つ用途

  • コードやデータベースなどの物理的な表現

などの観点から設定します。

その境界内では、モデルを厳密に一貫性のあるものに保つことが重要です。

明示的な境界を用いることで、チームメンバは一貫性を保つべき部分が把握でき、それを他のコンテキストとどう関係づけるかを、明確な理解を共有できるようになります。

継続的な統合

境界内で行われるすべての作業について、頻繁に統合して一貫性を保つことにより、考え方の分裂が見られた時にすぐに発見して修正できるようになります。

継続的な統合も、他のDDDパターンと同様に、以下2つのレベルで作用します。

No レベル 内容
1 ドメインモデルの統合 チームメンバ間の絶え間ないコミュニケーションによって実現され、日々変化するモデルに関して、共有された理解を培う。最も基本的な所として、ユビキタス言語を統合させる。
2 実装の統合 頻繁に、各開発者のコードをマージする。

コンテキストマップ

それぞれの境界づけられたコンテキストに対して明確な名前を与えた上で、ドメインモデル同士の接点を記述して、あらゆるコミュニケーションで必要となる明示的な変換の概略を述べます。

以上が「第14章 モデルの整合性を維持する」のまとめです。 本来なら、「境界づけられたコンテキスト間の関係」があるんですが、種類が多すぎたので、まとめは省略しました。