CQRS + ES: неактуальная команда / событие для агрегата, но важная для проекции - PullRequest
0 голосов
/ 19 октября 2018

У меня Приложение Агрегат , он может обрабатывать команд как Регистрация , Установить , Удалить , Скрыть , Показать , ChangeOwner , Опубликовать , Отменить публикацию ... существует около20 команды в Приложение агрегат .Каждая команда проверяет инварианты Приложение , например Приложение может быть:

  • Опубликовано когда имя, описаниеи другие данные действительны,
  • Скрыто только тогда, когда Опубликовано ,
  • Установлено не владельцем и после, когда оноis Опубликовано ,
  • PublicationCanceled когда нет установок ...

Приложение генерирует соответствующие события , когда команды действительны. События обрабатываются проекциями и менеджерами процессов .

У меня Приложение и Статистика проекция - они обрабатывают события из приложения агрегат , обе проекции на 100% основаны на событиях , так что проекции можно полностью удалить и восстановить с нуля. Приложение и Статистика Прогнозы запрашиваются пользователями через http: получить конечную точку

Проблема :

Теперь у меня есть запрос от бизнес-аналитики проследить, когда Приложение является Открыто потенциальным клиентом.К открытию они понимают, что потенциальный клиент видит Заявление Проекция Детали, такие как (название, описание, цена, характеристика, преимущества, количество установок, обзоры ...),

Теперь мне интересно, разрешено ли мне создавать Открыть команду в Приложении агрегат .Он не изменит состояние aggregate , инварианты для него не важны.Эта команда необходима только из-за статистики прогнозы .

Дополнительная проблема заключается в том, что некоторые Приложения могут посещаться сотни раз в день, поэтому они могутгенерировать огромное количество событий для обработки, когда агрегат загружается в память.

Считаете ли вы, что создание Open команда в приложении агрегат для генерации открытое событие хороший способ решить эту проблему?

1 Ответ

0 голосов
/ 01 ноября 2018

Может ли команда Приложение отклонить команду Открыть ?Если это невозможно, действительно ли это команда?

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

Если команда Open не может быть отклонена, и вы по-прежнему полны решимости отследить отслеживание пользователей с помощью событий, вы можете просто создать событие ApplicationOpened , не выполняя командуКоманда для агрегата.

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

...