Каковы преимущества хранения команд в системе CQRS/ES?

Я работаю над системой хранения CQRS/событий. На данный момент шаблон, который я использую, заключается в том, чтобы команды были синхронными. То есть пользовательский интерфейс не показывает операцию как выполненную до тех пор, пока команда не будет завершена, и пользователю будет показано успешное/неудачное выполнение. Во время выполнения команд все сгенерированные события (например, действие X произошло в корне агрегата Y) сохраняются в долговременном хранилище.

Все описания CQRS, которые я прочитал, реализуют хранение команд. Меня интересует, нужно ли это в моей ситуации.

Еще одно замечание: существует много длительных действий командного типа, поэтому я разбил операции на команду, которая генерирует события, а события, в свою очередь, выдают больше команд. Команды являются идемпотентными в зависимости от состояния совокупного корня. Я не знаю, как это повлияет на ответ, но стоит отметить.


person Erick T    schedule 18.04.2012    source источник
comment
Не могли бы привести несколько примеров реализации, в которых хранятся команды? Большинство примеров, которые я видел, сохраняют только события, созданные в результате выполнения команд.   -  person Chris Moutray    schedule 18.04.2012
comment
У меня нет никаких фреймворков, но CQRS без источников событий записывает команды для воспроизведения, по крайней мере, насколько я понимаю.   -  person Erick T    schedule 19.04.2012
comment
Я немного беспокоюсь о безопасности. Что вы планируете делать с такими командами, как ChangeUserPassword, которые содержат пароль в виде открытого текста?   -  person Kimble    schedule 02.08.2012


Ответы (2)


  1. Регрессионное тестирование После каждой итерации разработки вы можете получить журнал команд из производственной среды, повторно выполнить его и сравнить поток событий, созданный с потоком в производственной среде. Если они разные - у вас регресс в логике.

  2. Визуализация и анализ потока сообщений.

person Yevhen Bobrov    schedule 19.04.2012

Примеры Cqrs, которые я видел без источника событий, представляют собой обычные реляционные базы данных, в которых хранится состояние системы, а не события, которые показывают, как возникло состояние данных. «Поиск команд» — это новая для меня концепция, и она кажется мне неправильной, поскольку обработчики команд могут меняться со временем. Любые изменения в логике обработчиков команд, вероятно, приведут к сбою команд при повторном воспроизведении. Воспроизведение событий не имеет этой проблемы, поскольку свойства ваших объектов задаются напрямую.

person Chris Moutray    schedule 18.04.2012