Как унифицировать валидацию по слоям / уровням - PullRequest
3 голосов
/ 02 октября 2011

В типичном приложении MVC у нас есть проверка, которая происходит во многих разных местах.Это может быть на стороне клиента, в контроллере, а затем снова на уровне данных.Если у вас есть бизнес-уровень, то там также есть дополнительная проверка.

Как мы объединяем все это, чтобы не нарушать DRY и не вызывать ночные кошмары поддержки при изменении проверок?Подвопрос заключается в том, как включить динамическую проверку на основе модели на всех уровнях.

Например: у нас может быть ViewModel, который имеет атрибуты аннотации данных.В MVC2 / 3 это объединяет проверку на стороне клиента и контроллера, но не помогает с моделью данных (если только вы не используете свою модель данных в качестве модели представления, что не является хорошей практикой).

Этоозначает, что вы должны добавить одинаковые проверки к модели данных и бизнес-уровням, дублируя их.Более того, модель данных может иметь несколько иные требования проверки, чем модель представления (например, целая запись данных может содержать несколько моделей представления многошагового мастера. И только полная запись может быть сохранена).

Некоторые люди добавляют сложную проверку в модель данных при использовании ORM, такого как EF или L2S с частичными классами, что я не уверен, что это правильный путь.Он работает для приложений, которые в первую очередь ориентированы на данные (приложения типа ввода данных), но не будет работать для приложений, которые имеют больше бизнес-логики, не связанной с данными.

Мне нужен какой-то способ генерирования проверки длявсе слои, или способ подключиться к единой системе проверки.Существует ли что-нибудь подобное?

Ответы [ 2 ]

1 голос
/ 02 октября 2011

«Свободная проверка» обеспечивает лучшее повторное использование. Пожалуйста, посетите. http://fluentvalidation.codeplex.com/

Многократно используемые документы для быстрой проверки.

http://fluentvalidation.codeplex.com/wikipage?title=CreatingAValidator&referringTitle=Documentation&ANCHOR#ReusingValidators

http://fluentvalidation.codeplex.com/wikipage?title=CreatingAValidator&referringTitle=Documentation&ANCHOR#Collections

Ниже вы можете полностью заполнить ваши потребности. http://tnvalidate.codeplex.com/

0 голосов
/ 03 октября 2011

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

Пример. Ваш пользовательский интерфейс не должен содержать логику бизнес-уровня на случай, если вы когда-нибудь измените пользовательский уровень или создадите новый.

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