集約ルートからのイベントの公開

リポジトリによって管理されるエンティティは、集約ルートです。ドメイン駆動設計 [Amazon] アプリケーションでは、これらの集約ルートは通常、ドメインイベントを発行します。Spring Data は、@DomainEvents と呼ばれるアノテーションを提供します。これは、次の例に示すように、集約パブリケーションのメソッドで使用して、その公開をできるだけ簡単にすることができます。

集約ルートからのドメインイベントの公開
class AnAggregateRoot {

    @DomainEvents (1)
    Collection<Object> domainEvents() {
        // … return events you want to get published here
    }

    @AfterDomainEventPublication (2)
    void callbackMethod() {
       // … potentially clean up domain events list
    }
}
1@DomainEvents を使用するメソッドは、単一のイベントインスタンスまたはイベントのコレクションのいずれかを返すことができます。引数を取ってはいけません。
2 すべてのイベントが公開された後、@AfterDomainEventPublication でアノテーションが付けられたメソッドがあります。これを使用して、公開するイベントのリストを(他の用途の中でも)潜在的にクリーンアップできます。

これらのメソッドは、次の Spring Data リポジトリメソッドのいずれかが呼び出されるたびに呼び出されます。

  • save(…)saveAll(…)

  • delete(…)deleteAll(…)deleteAllInBatch(…)deleteInBatch(…)

これらのメソッドは引数として集約ルートインスタンスを取ることに注意してください。これが、実装がインスタンスを削除するクエリを発行することを選択する可能性があるため、deleteById(…) が特に存在しない理由です。そのため、そもそも集約インスタンスにアクセスできなくなります。