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)
    }
}
Другие вопросы по тегам