Гибкая проверка и аннотации данных [закрыто]

123

Каковы оперативные различия между этими двумя пакетами проверки при использовании для проверки ASP.NET MVC? Кажется, что у них есть похожие объекты, вплоть до их имен объектов. Одно связано с другим? В чем их отличия? Каким образом эти различия обозначают разные варианты использования?

SiberianGuy
источник
52
Также интересно отметить, что вопросы, которые закрыты как неконструктивные, обычно получают много положительных голосов, поэтому они действительно полезны для людей. Должно быть, с этим что-то не так
Дмитрий Ефименко
2
Я согласен с тем, что этот тип вопросов полезен, но ответы ниже кажутся мне больше мнениями, а не фактами.
Ian Warburton
3
Я также полностью согласен, однако вопрос «в чем разница» вместо «каковы ваши предпочтения», вероятно, позволил бы избежать ситуации.
Джереми А. Уэст
Я думаю, что дело в том, что вы должны сформулировать это так, чтобы ответы основывались не на фактах, а на мнениях. Не спрашивайте: «Что вам больше всего нравится?» но "Какие оперативные различия между ними?" Тогда вы не получите ответов вроде «Я предпочитаю Fluent Validation». но вместо этого вещи, которые сначала ставят на первый план различия, а затем представляют результаты.
ruffin

Ответы:

113

Я предпочитаю Fluent Validation :

  1. Это дает мне гораздо лучший контроль над моими правилами проверки
  2. Выполнение условной проверки различных свойств намного проще по сравнению с аннотациями к данным.
  3. Он отделяет проверку от моих моделей просмотра
  4. Модульное тестирование намного проще по сравнению с аннотациями данных
  5. Он имеет отличную поддержку проверки на стороне клиента для большинства стандартных правил проверки.
Дарин Димитров
источник
6
Еще несколько моментов из этой статьи ( webdevbros.net/2010/12/03/… ): 1. Слишком много аннотаций делают вашу модель некрасивой (похоже на ваш пункт 3) 2. Лучшее повторное использование 3. Лучшая производительность (поскольку нет отражения )
SiberianGuy
2
@Idsa Оценка производительности звучит сомнительно. Отражение должно происходить только один раз для каждой модели. Это предполагает хорошую реализацию, я не знаю, как работает эта конкретная реализация.
CodesInChaos
@CodeInChaos, похоже, вы правы. Но я оставлю это там, так как я также не уверен (и достаточно ленив, чтобы узнать), как это реализовано.
SiberianGuy
2
Я поддерживаю FluentValidation ... это потрясающе. С точки зрения ОКР кода мне нравится, что он снимает ответственность за проверку с представлений и предоставляет им собственные классы. Некоторое время я пробовал xVal в MVC1 ... Аннотации к данным подходили для простых вещей, но как только вы получили больше, чем несколько правил, вы едва ли могли сказать, что должна была представлять ViewModel.
Brandon Linton
@Darin, как передать сообщения об ошибках в представлении? вы можете привести пример, как это сделать?
Хайме Сангкап
32

Я явно предпочитаю аннотации к данным, потому что ...

  1. все правила проверки могут быть настроены в одном месте кода (в классе метаданных модели), и их не нужно повторять где-либо еще.
  2. имеется отличная поддержка проверки на стороне клиента (опять же - без повторения правил проверки!) при использовании атрибутов аннотации данных .
  3. Атрибуты аннотации к данным можно проверить, чтобы убедиться, что они есть.
  4. есть хорошие дополнительные атрибуты проверки, созданные сообществом (например, расширения аннотаций к данным ).
Мариус Шульц
источник
2
Я думаю, что большинство из этих свойств может быть достигнуто с помощью некоторой формы быстрой проверки. Я не знаю, поддерживает ли это библиотека в OP, но в принципе это возможно, да и не очень сложно.
CodesInChaos
Какой смысл тестировать на наличие атрибутов? Разве это не повторение правил проверки?
Сэм
30
@Sam: проверяя, украшены ли свойства атрибутами аннотации данных, вы не проверяете функциональность самого атрибута; вы просто убедитесь, что он там. Должен сказать, что сейчас, два года спустя, я на стороне Дарина и согласен с его ответом.
Мариус Шульц
@Sam, потому что вы, вероятно, захотите узнать, удалит ли кто-нибудь это из вашей модели.
Стив
3
Замечательный комментарий Мариус. Жаль, что большинство руководств по EF в настоящее время показывают, что проверка выполняется с помощью аннотаций к данным. Меня также изначально зацепила простота аннотаций, но вскоре после того, как я попытался реализовать настраиваемое правило проверки, я сразу же перешел на команду Fluent Validation ... Кстати, очень плохо, что Дарин перестал публиковать :( Большая часть его комментарии в StackOverflow появляются спустя более 5 лет !!!
Кошера