發佈來自聚合根的事件
由 repositories 管理的實體是聚合根。在領域驅動設計應用程式中,這些聚合根通常會發佈領域事件。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 repository 方法之一時,都會呼叫這些方法
-
save(…)
,saveAll(…)
-
delete(…)
,deleteAll(…)
,deleteAllInBatch(…)
,deleteInBatch(…)
請注意,這些方法將聚合根實例作為引數。這就是為什麼 deleteById(…)
明顯缺席的原因,因為實作可能會選擇發出查詢以刪除實例,因此我們永遠無法存取聚合實例。