События CQRS не содержат деталей, необходимых для обновления модели чтения.

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

К сожалению, это довольно распространенный сценарий.

Пример: я добавляю пользователя в группу, поэтому отправляю команду addUserToGroup (userId, groupId). Это получено, обработано обработчиком команды, событие userAddedToGroup создано, сохранено и опубликовано.

Теперь обработчик события получает это событие и оба идентификатора. Теперь должно появиться представление, в котором перечислены все пользователи с именами групп, в которых они находятся. Чтобы обновить модель чтения для этого представления, нам нужен идентификатор пользователя (который у нас есть) и имя группы (которое мы не называем); у нас есть только его идентификатор).

Итак, вопрос: как мне справиться с этим сценарием?

В настоящее время мне на ум приходят четыре варианта, каждый со своими специфическими недостатками:

The read model asks the domain. => Forbidden, and not even possible, as the domain only has behavior, no (public) state.

The read model reads the group name from another table in the read model. => Works, but what if there is no matching table?

Add the neccessary data to the event. => Does not work, as this means that I had to update all previous events as well, and I cannot foresee which data I may need one day.

Do not handle the event via a "usual" event handler, but start an ETL process in the background that deals with the event store, creates the neccessary data and writes the read model. => Works, but to me this seems a little bit of way too much overhead for such a simple scenario.

Итак, вопрос: как мне правильно справиться с этим сценарием?

Ответы на вопрос(3)

Ваш ответ на вопрос