7

私はDDDを初めて使用し、詳細情報を入手するために現在記事を読んでいます。記事の1つは、ドメインイベント(DE)に焦点を当てています。たとえば、電子メールの送信は、コードの実行中にいくつかの基準が満たされた後に発生するドメインイベントです。

コード例は、ドメインイベントを処理する1つの方法を示しており、その後にこの段落が続きます

上記のコードは通常のドメイン作業と同じトランザクション内の同じスレッドで実行されるため、SMTPやWebサービスの使用などのブロックアクティビティの実行は避ける必要があることに注意してください。代わりに、一方向のメッセージングを使用して、これらのブロッキングアクティビティを実行する他の何かと通信することをお勧めします。

私の質問は

  1. これはDEを処理する際の一般的な問題ですか?それとも、言及された記事の解決策の懸念だけですか?
  2. ドメインイベントがトランザクションで発生し、システムがそれらを同期的に処理しない場合、どのように処理する必要がありますか?
  3. これらのイベントをシリアル化してスケジューラー(または他のメカニズム)に実行させることにした場合、トランザクションがロールバックされるとどうなりますか?(記事では、トランザクションで実行されたコードでイベントが発生します)誰がそれらをキャンセルしますか(データベースに永続化されていない場合)?

ありがとう

4

1 に答える 1

8

それは一般的な問題の期間ですDDDを気にしないでください

一般に、パフォーマンスの高い方法で応答する必要があるシステム (Web サーバーなど) では、長時間実行されるアクティビティは、トリガー プロセスとは非同期で処理する必要があります。

これはキューを意味します。

トランザクションをロールバックすると、アイテムがキューから削除されます。

もちろん、キュー上のアイテムの処理に失敗した場合 (つまり、電子メールが送信されない場合) を処理するための追加のメカニズムが必要になりました。また、トリガー コードでこれを許可する必要があります。プロセスがすでに発生していると、ある時点で問題が発生します。

つまり、キューイング メカニズム自体がトランザクション対応であり、再試行が可能である必要があり、一連のイベント全体をワークフローとして考える必要があります。

于 2011-06-08T14:24:31.430 に答える