2014-12-18 12 views
1

Модели CQRS, такие как AXON, используют метод apply внутри агрегата, который в конечном итоге публикует событие для шины событий, а обработчик команд также имеет доступ к eventbus для публикации события eventHandled в eventbus.CQRS: Apply() vs eventBus.publish()

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

ответ

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) 
    } 
}