境界づけられたコンテキストは独自のデータストアを所有する
from DMMF: Persistence
具体的には、以下の 2 つを表す
1. 境界づけられたコンテキスト はそれぞれ独自の データストア と関連スキーマを所有している
これらの情報は、他の境界づけられたコンテキストと調整することなくいつでも変更できる
独自のデータストア
論理的でも物理的でも良い radish-miyazaki.icon
物理的: データベース
論理的: ORM における Modelのように、生成されるタイミングが別のデータ
e.g. 在庫管理システム と 注文管理システム における「商品」
在庫からは削除しても、履歴として持ったままにしておきたい
境界づけられたコンテキストは独自のデータストアを所有する#66b5e5ba75d04f0000c5832f
2. 他のシステムは、境界づけられたコンテキスト が所有するデータには直接アクセスできない
代わりに、境界づけられたコンテキストのパブリック API を使用するか、データストアの何らかのコピーを使用すべき
e.g. レポーティングシステム や ビジネスアナリティクスシステム
境界づけられたコンテキストは独自のデータストアを所有する#66b727ab75d04f0000c95db3
目標は、各々の 境界づけられたコンテキスト が切り離されて独立して進化できるようにすること
e.g. システム A がシステム B のデータストアにアクセスする
コードベース が完全に独立しても、データを共有していると 2 つのシステムは結合していると見なせる
具体的にどう切り離するか
極端なケースを考える
物理的に極端な例
各境界づけられたコンテキストがそれぞれ物理的に異なるデータベースを持ち、他のコンテキストとは完全に分離してデプロイされる
マイクロサービス ?? radish-miyazaki.icon
論理的に極端な例
すべてのコンテキストのデータを 1 つの物理的なデータベースとして格納する
名前空間 などを活用して、各コンテキストのデータを論理的に分離する
モノリスサービス ?? radish-miyazaki.icon
複数ドメインのデータを扱う
ビジネスインテリジェンス(BI) システムについて考える
このようなシステムでは、複数のコンテキストからデータにアクセスする必要がある
そのまま実装してしまうと、以下のガイドラインに違反する
他のシステムは、境界づけられたコンテキスト が所有するデータには直接アクセスできない
回避策
1. 「ビジネスインテリジェンス」をドメインとして扱う
2. 他の 境界づけられたコンテキスト が持つデータをコピーする
この考え方自体は、OLTP と OLAP との区別のように昔からあった
https://www.gixo.jp/blog/2934/
どうコピーするか
1. 他のシステムから発行されるイベントをサブスクライブし、そのイベントに対応するレコードを自身のデータストアに挿入する
https://scrapbox.io/files/66b72a729b32b9001d21ef88.png
BI コンテキストは単なる別の ドメイン として扱えるため、設計において特別視する必要がない
2. 元となるシステムから BI システムにデータをコピーする
最初の実装は簡単だが、元となるスキーマの変更に追従させる必要があり、保守性 が低い
warning.icon BI システムでは、これまで見てきたような厳密な ドメインモデル を定義するより、アドホック なクエリや多様なアクセス手段を効率的にサポートする多次元データベース(キューブ)を構築するほうが重要である