回答:
ドメインイベントハンドラーをアプリケーション層に配置します。
ドメインイベントは、ドメインレイヤーで何かが発生したことを外部レイヤー(または外部世界)に伝える方法です。イベントをどうするかは、アプリケーションによって異なります。アプリケーションは、ユーザーに変更を通知するか、別のドメインを呼び出して何かをすることがあります。アプリケーションは、ユーザーアクション、Webリクエスト、またはドメインイベントに反応してドメイン操作を調整する役割を果たします。
元のDDDブック(Evans 2004)では、アプリケーション層はユーザーのアクションに応じてドメインオブジェクトを実行する薄い層として説明されています。したがって、ドメインイベントの一般的なイベントハンドラーは、アプリケーション層に属しません。
上向きの依存関係を作成して階層化を壊さない限り、それらの一部をドメインレイヤーに配置することは理にかなっています。
ドメインレイヤーの下にインフラストラクチャレイヤーがある場合、イベントハンドラーはレイヤー化を中断するため、そこに配置できません。
ドメインレイヤーの上にあるアダプターレイヤーがある場合は、そこにイベントハンドラーを作成できます。六角形のアーキテクチャをご覧ください。
ドメインインターフェイスとしてドメインレイヤーにドメインイベントハンドラーを配置しますIDomainEventHandler
。
ドメインイベントハンドラーの例は、新しいトランザクションを初期化するために特定のドメインイベントにサブスクライブするポリシーです(たとえば、新しいドメインコマンドをトリガーするため)。ビジネスの論理。
注文が確認されたため、請求書リクエストを作成する必要がある例を考えることができます。OrderConfirmedEvent
起こった出来事があります。ドメイン内のポリシーは、このイベントにサブスクライブしRequestInvoice
、コマンドハンドラーによって処理され、それに応じて処理されるドメインコマンドを作成します。
アプリケーションレイヤーにこのイベントハンドラーがある場合、ユーザーのアクションを調整することに加えて、アプリケーションレイヤーがいくつかのビジネスロジックを実行することを意味します。
しかし、私たちは持っています