Какая библиотека проверки для ASP.NET MVC?

Я пытаюсь решить, какой подход к проверке использовать для нового проекта ASP.NET MVC. (И вау, вариантов масса!)

В проекте используется NHibernate, поэтому первым делом я рассмотрел NHibernate Validator (из-за тесной интеграции с NHibernate). Однако, насколько я понимаю, такая тесная интеграция дает только несколько преимуществ:

1) Схемы БД, сгенерированные NHibernate, будут включать детали проверки (например, длина столбцов будет установлена ​​на максимальное значение, разрешенное при проверке). (Хотя меня это не особо интересует, поскольку я генерирую схемы вручную.)

2) NHibernate выдаст исключение, если вы попытаетесь сохранить данные, не соответствующие требованиям валидации. (Мне это кажется довольно избыточным, поскольку данные, по-видимому, уже будут проверены любым механизмом, который вы выберете перед сохранением в любом случае)

Если у NHibernate Validator больше преимуществ, дайте мне знать!

Другие библиотеки, о которых я немного читал, включают:

  • MS DataAnnotations
  • Замок Валидатор
  • Что-то другое?

Я также думал об использовании xVal для обеспечения проверки на стороне клиента по тому же набору правил. Однако я слышал, что ASP.NET MVC v2 будет включать что-то похожее на xVal (интеграция с jquery) из коробки? Сделает ли эта новая включенная функция ненужной некоторые другие?

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

Что сработало для вас? Как вы думаете, какой вариант имеет / будет иметь преимущество?

Спасибо!


person UpTheCreek    schedule 12.10.2009    source источник


Ответы (4)


Я использовал FluentValidation вместе с плагин проверки jQuery и по-прежнему не может найти ситуацию, с которой не может справиться.

person Darin Dimitrov    schedule 15.10.2009
comment
Это выглядит очень интересно, спасибо за публикацию. Позже я посмотрю более подробно - на первый взгляд кажется, что это может быть очень полезно для проверки бизнес-правил. Базовая проверка данных может быть немного более подробной, но это не имеет большого значения. Вы знаете, насколько хорошо эта установка справляется с интернационализацией? - person UpTheCreek; 16.10.2009
comment
Для i18n вы можете поместить все сообщения в файл ресурсов и использовать их в методе WithMessage FluentValidation. - person Darin Dimitrov; 16.10.2009
comment
Я принял это как ответ, так как это библиотека, которую я раньше не видел. Выглядит хорошо, и сейчас я собираюсь реализовать это. - person UpTheCreek; 21.10.2009
comment
Дарин, есть ли у вас какая-нибудь информация о том, как интегрировать FluentValidation и jQuery Validation? В качестве примера я бы предположил, что было бы неплохо использовать одни и те же сообщения для правил, которые проверяются как на стороне клиента, так и на стороне сервера. - person Kenny Evitt; 06.03.2014

Мне нравится xVal.

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

person Misha N.    schedule 12.10.2009
comment
Спасибо. Какой базовый механизм проверки вы используете? Замок? Аннотации к данным? - person UpTheCreek; 12.10.2009
comment
Не уверен насчет Миши, но мы используем xVal + DataAnnotations. Я построил генератор T4, который испускает наши бизнес-объекты и DAL и помещает соответствующие атрибуты в элементы данных. - person GalacticCowboy; 12.10.2009
comment
DataAnnotations, но, честно говоря, я просто решил работать с DataAnnotations без расследования, может ли какой-то другой механизм быть лучше. Итак, я не знаю, почему одно лучше другого. - person Misha N.; 12.10.2009
comment
Что меня беспокоит по поводу аннотации данных, так это то, что в настоящее время MS не предоставляет бегуна. Похоже, что проект xVal предоставляет один, но с оговорками: [Цитата из комментариев кода бегуна] Запускает каждый атрибут ValidationAttribute, связанный со свойством в предоставленном экземпляре, и возвращает ErrorInfo, относящийся к каждой ошибке проверки. Предупреждение: определенные типы ValidationAttribute заявляют, что они действительны, даже если они не являются действительными - этому средству выполнения потребуется обнаруживать эти особые случаи, если вы планируете полагаться на него. К счастью, другие участники проверки ... правильно сообщают обо всех своих ошибках. [/Цитировать] - person UpTheCreek; 12.10.2009

DataAnnotations, реализованные с помощью классы друзей и Проверка клиента JQuery

Убедитесь, что вы используете предварительный просмотр MVC 2

person RailRhoad    schedule 15.10.2009
comment
Да, похоже, это будет выбор по умолчанию в версии 2, не так ли. Мне интересно, если они просто идут по пути MS с аннотациями к данным, а не реальным передовым опытом. - person UpTheCreek; 16.10.2009

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

person Matt Kocaj    schedule 17.10.2009