集約は関連するビジネス オブジェクトをグループ化し、集約ルート(AR) はその集約の「代表」です。AR 自体は、(より大きく、より複雑な) ドメイン概念をモデル化するエンティティです。DDD では、モデルは常にコンテキスト (境界付けられたコンテキスト - BC) に対して相対的です。つまり、そのモデルはその BC でのみ有効です。
これにより、特定のビジネス コンテキストを表すモデルを定義でき、すべてを 1 つのモデルだけに押し込む必要はありません。Orderは、あるコンテキストでは AR ですが、別のコンテキストでは単なる ID です。
AR はすべての下位概念とビジネス ルールをほとんどカプセル化するため、全体として、つまりトランザクション/作業単位として機能します。1) リポジトリは常にビジネス オブジェクトを処理し、2) AR は特定のコンテキストのビジネス オブジェクトを表すため、リポジトリは常に AR と連携します。
2 つ以上の AR を含むユース ケースがある場合、ビジネス ワークフローとそのユース ケースの正しいモデリングが最も重要です。多くの場合、これらの AR は個別に変更することができます (他のものは気にしません)。または、他の AR の動作の結果として ARが変更されます。
あなたの例では、それはかなり簡単です: 顧客が 100 個のアイテムを注文すると、ドメイン イベントが生成されて公開されます。次に、注文がカスタマー プロモーション ルールに準拠しているかどうかを確認するハンドラーがあり、準拠している場合は、クライアントの状態を VIP に変更するコマンドが発行されます。
ドメイン イベントは非常に強力で、結果整合性のある環境でトランザクションを実装できます。古い db トランザクションは実装の詳細であり、通常は 1 つの AR を永続化するときに使用されます (AR は論理ユニットとして扱われますが、永続化には複数のテーブルが含まれるため、db トランザクションが含まれる場合があることに注意してください)。
結果整合性は、豊富なドメイン (そして現実の世界) に自然に適合するドメイン イベントの「機能」です。場合によっては、即時の一貫性が必要になる場合がありますが、これらは特定のケースであり、ドメインの動作ではなく UI に関連しています。もちろん、ドメインによって異なります。あなたの例では、顧客は、同じミリ秒ではなく、注文が行われてから 2 秒または 2 分後に VIP になったことを気にしません。