私の会社では、現在、イベント ソーシングと CQRS を組み合わせた DDD アーキテクチャを使用しています。初期バージョンでは、すべてのコンテキストが他のコンテキストからイベントを受信できるようにしていました。しかし、どのイベントがどこで処理されたかを追跡することが非常に難しくなったため、これはすぐに混乱しました。
私たちの現在のアプローチは、コマンドが他のコンテキストに送信されることのみを許可することです。これはうまく機能しますが、多くのコード オーバーヘッドが発生するようです。例えば:
context A sends a command to context B,
which changes the state of a domain model,
which publishes an event,
which gets handled by an event handler,
which sends a command back to context A,
which changes the state of a domain model,
which publishes an event,
which gets handled by an event handler,
which sends a command to context C,
etcetera.
さまざまなコンテキストの多くのドメイン モデル、および別のコンテキストに送信されたコマンドをトリガーする多くのイベントには、多くの同様のデータが含まれています。特に顧客の Web サイトのコンテキストでは、モデルにはロジックや状態がほとんど含まれておらず、Web サイト データベースに対して非正規化できるイベントを生成するためにのみ使用されます。それは機能しますが、イベントの発行がドメイン モデルの唯一の目的であってはならないため、これも適切な方法ではないようです。
私たちのアイデアの 1 つは、CMS をドメイン モデルのように動作させ、コマンドをモデルを介して送信する代わりに直接処理し、結果のイベントを処理することでした。これは、このようなケースを処理する適切な方法ですか? また、コンテキスト間で通信するためのより効率的な方法は他にありますか?