このアプリケーションでは、ドメイン モデルで何かが変更されたときにドメイン イベントを発生させます。イベント ハンドラーによって実行されるタスクの一部は、イベントが発生したときに使用されたのと同じトランザクション内で実行する必要があり、他のタスクはこのトランザクションの外部で実行する必要があります。
例えば、
Orderline が Order エンティティに追加されると、OrderLineAdded ドメイン イベントが発生し、1 つのドメイン イベントがドメイン モデルの状態を変更します (したがって、同じトランザクションで実行する必要があります)。トランザクションが完了すると、UI を更新する必要があります。
この問題にどのように取り組みますか?
- トランザクション内で 1 つ、トランザクション外で 1 つの 2 つのイベントを発生させます。
- トランザクション内でイベントを発生させますが、イベント ハンドラーを使用して Async 要求を送信し、UI を更新しますか?
オプション 1 は、イベント名が何らかの形でトランザクション内またはトランザクション外であることを伝える必要があるため、紛らわしいように見えますが、オプション 2 では、ドメイン イベントのハンドラーは常に、トランザクション内から同期的に呼び出されると想定する必要があります。
たぶん、より良いアプローチがありますか?