CQRS: Apply () против eventBus.publish ()

Шаблоны CQRS, такие как AXON, используют метод apply внутри агрегата, который в конечном итоге публикует событие в шине событий, а обработчик команд также имеет доступ к шине событий для публикации события commandHandled в шину событий.

Какие плюсы и минусы и когда что использовать?


person ubreddy    schedule 18.12.2014    source источник
comment
Взгляните на это   -  person Mohsen    schedule 06.07.2020


Ответы (1)


Метод Apply в агрегатах обычно включает в себя сохранение событий в хранилище событий в дополнение к публикации событий при принятии источника событий.

С другой стороны, публикация событий непосредственно в обработчике команд обычно заставляет ваши агрегаты раскрывать более подробную информацию, когда команда может генерировать различные типы событий. Например:

//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)
    }
}
person Yugang Zhou    schedule 18.12.2014