Правильно ли читать источники событий, когда мы хотим историю? - PullRequest
3 голосов
/ 22 июля 2011

Мое приложение использует архитектуру CQRS. Все выполняется через мои агрегаты, таким образом, действие каждого пользователя сохраняется как событие в моем хранилище источника событий.

Теперь мне нужна новая форма, которая показывает историю каждого действия, выполненного в моем приложении, так что мне делать?

1 - Читать магазин событий? Как?

2 - Опубликовать событие в каждом из моих обработчиков доменов, например "SavedToHistory (пользователь, действие, дата / время)), а затем в моих обработчиках событий сохранить его в моей модели данных для чтения?

Ответы [ 2 ]

4 голосов
/ 23 июля 2011

Если вам нужно показать полную историю для разработчиков, то вы можете просто скопировать все события в журнал домена (прочитать модель с агрегированным списком всех событий, которые разрешено видеть разработчикам).

Если вам нужно показать историю пользователям, то показ десериализованных событий не будет работать так хорошо. Вместо этого у вас может быть модель чтения, которая отображает каждое событие в активность с некоторым понятным для человека описанием. Это то, что мы делаем для фидбэков типа «что нового».

В обоих случаях применяются одни и те же правила управления моделями чтения - если вы измените правила агрегирования событий или сопоставления их с удобочитаемыми действиями, просто отбросьте модель чтения и полностью восстановите ее из истории.

4 голосов
/ 22 июля 2011

Так как вся идея CQRS заключается в разделении чтения и записи и хранения (чтение и запись снова), я думаю, что наиболее последовательное действие, которое вы можете предпринять, - это записать денормализованные исторические данные в базу данных Read и прочитать ееоттуда вместо того, чтобы пытаться прочитать его из хранилища событий.

Это может быть просто;вы можете написать общий денормализатор, который может записать любое новое событие в хранилище событий в денормализованную версию в базе данных Read, или у вас могут быть специализированные денормализаторы - это зависит от того, как вы хотите отобразить историю в своем приложении.

В любом случае, запишите денормализованные версии ваших событий в базу данных Read, чтобы вашему приложению не нужно было точно знать, как события структурированы в хранилище событий.

...