CQRS: Apply() против eventBus.publish()
Шаблоны CQRS, такие как AXON, используют метод apply внутри агрегата, который в конечном итоге публикует событие в шине событий, а обработчик команд также имеет доступ к шине событий для публикации события commandHandled в шине событий.
Какие плюсы и минусы и когда что использовать?
1 ответ
Решение
Метод применения в агрегатах обычно включает в себя сохранение событий в хранилище событий в дополнение к публикации событий при принятии источника событий.
С другой стороны, публикация событий непосредственно в обработчике команд обычно заставляет ваши агрегаты раскрывать больше деталей, когда команда может генерировать события различных типов. Например:
//in command handler
public void handle(FooCommand command) {
Foo aggregate = //retrieve aggregate
aggregate.handle(command)
if (aggregate.isFoo()) {
eventBus.publish(aFooEvent)
} else if (aggregate.isBar()) {
eventBus.publish(aBarEvent)
}
}