CQRS и Event Sourcing - сохранять команды вместо событий? - PullRequest
0 голосов
/ 31 марта 2020

Я новичок в CQRS и источнике событий, но, возможно, кто-то может мне помочь.

Коротко: я переношу объект команды в нечто вроде агрегата. Агрегат генерирует событие, которое хранится в репозитории. Теперь я могу использовать это событие для восстановления агрегата до текущего состояния. Это правильно?

А теперь, на мой взгляд: не проще ли сохранить команды? Если у меня есть одна команда создания и пять команд обновления, я могу перестроить свой агрегат, выполнив шесть команд на пустом агрегате. Мне не нужно обрабатывать команды И события для генерации агрегатов.

События также можно использовать как события домена, но они мне не нужны для получения событий.

Что такое преимущество использования источников событий вместо моего подхода?

1 Ответ

1 голос
/ 02 апреля 2020

Хороший вопрос. Есть несколько причин. Я покрою только два. Первый более концептуален, а второй более конкретен.

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

У вас также будут проблемы, если вам когда-нибудь понадобится воспроизвести ваши события. Допустим, вам нужно создать новую модель чтения на основе прошлых событий. Но если у вас их нет, вы не сможете. Также вы не хотели бы, чтобы система фактически выполняла все то, что заставляют команды делать это при перестройке агрегата или создании новых моделей чтения. Например, допустим, электронное письмо отправляется при обычной обработке определенной команды. Вы не хотите, чтобы это электронное письмо отправлялось каждый раз, когда вы перестраивали агрегат.

Надеюсь, что это имеет смысл.

Также - остерегайтесь команд 'create' 'read' update '. Это звучит как запах кода. Выезд https://danielwhittaker.me/2014/10/18/6-code-smells-cqrs-events-avoid/

...