ドメインイベントを処理する責任は誰にありますか?アプリケーションサービス、ドメインサービス、またはエンティティ自体DDDでは、誰がドメインイベントを処理する必要がありますか?
ここで簡単な例を使用してみましょう。
店舗アプリケーションに取り組んでおり、注文業務専用のアプリケーションサービスがあります。このアプリケーションでは、Order
は集約ルートおよびそれに続くルールであり、単一トランザクション内で1つの集約でのみ動作することができます。 Orderが置かれた後、Orderに格納されます。しかし、もっとやるべきことがあります。まず第一に、在庫内で利用可能な品目の数を変更し、次にシステムの他の部分(恐らく他の有界状況)に、その特定の注文の出荷手順を開始するように通知する必要があります。すでに述べたように、トランザクション内の集約は1つしか変更できないため、別のトランザクションの一部のコンポーネントによって処理されるOrderPlacedEvent
の発行について考えると思います。
質問:どのコンポーネントがこのタイプのイベントを処理する必要がありますか?
お返事ありがとうございます。耐久性について - 私はまだそれをどのように整理するのか分かりません。理想的には、2つのトランザクションといくつかの永続キュー(JMS?)イベントが同じトランザクション内に公開されている必要があり、メッセージが適切に配信されたことを確認し、メッセージがキューから取り出されると、このようにして、何か問題が生じた場合、イベントが再配信されることを保証することができます –