Я новичок в CQRS, и я свяжусь с целью проверки правильности бизнес-правил внутри стороны записи (домена). Я знаю, что проверка на стороне клиента должна выполняться с точки зрения допустимой даты (обязательное поле, длина строки, действительный адрес электронной почты и т.д.), А проверка бизнес-правил/бизнес-домена должна выполняться в домене. На самом деле, те же правила проверки на стороне клиента также должны применяться к команде в домене, так как мы не доверяем пользователям.
Итак, у нас есть допустимая команда (AddEmailToCustomer), и команда command вызывается в команде. Вот мой подход к проверке.
- Создайте экземпляры двух проверок команд в обработчике команд.
- Сначала проверяются данные команды так же, как проверка на стороне клиента (обязательное поле, действительный адрес электронной почты и т.д.).
- Второй валидатор проверяет данные на основе логики во втором валидаторе. Что-то вроде "этот клиент активен" или что-то еще. Я знаю, что меняющаяся электронная почта не подходит сюда, но это не важно. Важным является то, что здесь есть валидация бизнеса.
- Мы смотрим на ValidationResult, возвращаемый Validator.Validate(ICommand cmd), и мы обнаруживаем, что есть ошибки.
- Мы не хотим, чтобы клиент из репозитория вызывал метод UpdateEmail в AR. Итак, что мы будем делать в этот момент?
Выбрасывать и исключать в обработчике команд и добавлять туда эти ошибки? Отправить команду в очередь ошибок или где-то еще? Я отвечаю с чем-то вроде Bus.Reply и возвращает код ошибки? Если да, что мне делать с сообщениями об ошибках? Как сообщить эти ошибки пользователю? Я знаю, что могу отправить их позже, но в веб-сценарии я могу отправить идентификатор запроса в команде (или использовать идентификатор сообщения) и опросить ответ с идентификатором запроса и отобразить сообщения об ошибках пользователю.
Ваше руководство ценится.
Спасибо