Мы рассматриваем возможность внедрения шаблона CQRS на работе и у нас есть пара вопросов о проверке.
Допустим, у нас есть 3 совокупных корня:
User
Business
UserToBusinessRelationship
Когда пользователь регистрируется, отправленные события будут следующими:
UserCreated
BusinessCreated
UserAddedToBusiness
События должны быть проверены, например, для создания связи между пользователем и бизнесом должны быть созданы и пользователь, и бизнес.
Я вижу два подхода.
Предварительная проверка: создавайте модель чтения на лету, используя последний обработанный снимок плюс необработанные события, и используйте ее для проверки.
Проверка при обработке: принимайте события/команды как есть и выполняйте проверку при обработке событий.
Первый подход имеет немедленную обратную связь, но требует создания окончательной модели чтения только для проверки. Второй проще, но не дает потребителю обратной связи о том, что что-то пошло не так.
Я думал о чем-то вроде этого: когда вы создаете событие, вы возвращаете идентификатор, который вы можете позже использовать для запроса статуса события. Если обработка события прошла успешно, вы получите «ОК», в противном случае вы получите сообщение об ошибке, указывающее, что пошло не так.
Это правильный подход или излишество? Как потребитель узнает, что событие обработано и данные готовы к использованию?