私はDDDを初めて使用し、詳細情報を入手するために現在記事を読んでいます。記事の1つは、ドメインイベント(DE)に焦点を当てています。たとえば、電子メールの送信は、コードの実行中にいくつかの基準が満たされた後に発生するドメインイベントです。
コード例は、ドメインイベントを処理する1つの方法を示しており、その後にこの段落が続きます
上記のコードは通常のドメイン作業と同じトランザクション内の同じスレッドで実行されるため、SMTPやWebサービスの使用などのブロックアクティビティの実行は避ける必要があることに注意してください。代わりに、一方向のメッセージングを使用して、これらのブロッキングアクティビティを実行する他の何かと通信することをお勧めします。
私の質問は
- これはDEを処理する際の一般的な問題ですか?それとも、言及された記事の解決策の懸念だけですか?
- ドメインイベントがトランザクションで発生し、システムがそれらを同期的に処理しない場合、どのように処理する必要がありますか?
- これらのイベントをシリアル化してスケジューラー(または他のメカニズム)に実行させることにした場合、トランザクションがロールバックされるとどうなりますか?(記事では、トランザクションで実行されたコードでイベントが発生します)誰がそれらをキャンセルしますか(データベースに永続化されていない場合)?
ありがとう