Сопоставление ошибок проверки модели предметной области с ViewModel при использовании FluentValidation

Я надеюсь, что люди здесь могут дать мне некоторые идеи о том, как правильно это сделать.

В настоящее время у меня есть ViewModel, которую я использую для рендеринга экрана. Модель представления фактически содержит сглаженные данные нескольких моделей предметной области. Я украсил ViewModel атрибутами для выполнения базовой проверки, но реальная работа по проверке выполняется на уровне сервиса. Проблема возникает, когда возникает ошибка проверки на уровне службы. Имя свойства (т. е. — UserName) не соответствует записи в ModelState (т. е. — RegistrationViewModel.UserName).

У кого-нибудь есть рекомендации, как с этим справиться?

Заранее спасибо!

Стивен


person Steven    schedule 28.10.2011    source источник


Ответы (2)


Возможно, это не ответ на ваш вопрос, но я обычно подхожу к этому так:

В модели предметной области я не использую какую-либо структуру проверки и не использую ее для предоставления удобных для пользователя сообщений об ошибках. Я всегда удостоверяюсь, что модель находится в допустимом состоянии. Я выбрасываю исключение, когда установлено недопустимое значение (в установщиках свойств). Я использую конструкторы объектов домена, чтобы всегда получать их в допустимом состоянии при создании экземпляра, используя значения по умолчанию и параметры конструктора. Очень простой, но мощный, потому что вы всегда можете быть уверены, что ваша модель находится в допустимом состоянии. Вы должны модульно протестировать свои объекты домена, чтобы быть абсолютно уверенным. Этот подход также отлично работает с orm.

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

person Robin van der Knaap    schedule 28.10.2011
comment
проблема с этим подходом заключается в том, что я застрял бы, перенося свою логику проверки бизнеса (сложные правила вместо простого типа поля) в пользовательский интерфейс только для того, чтобы я мог получить лучшее сообщение. Я не верю, что это хороший подход. - person Steven; 05.11.2011

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

person Steven    schedule 05.11.2011