流畅的验证与数据注释

Sib*_*Guy 117 .net asp.net-mvc fluentvalidation data-annotations

您更喜欢哪种ASP.NET MVC验证方法?为什么?流利的验证数据注释?任何其他?

Dar*_*rov 109

我更喜欢Fluent验证:

  1. 它让我可以更好地控制我的验证规则
  2. 与数据注释相比,对不同属性进行条件验证要容易得多
  3. 它将验证与我的视图模型分开
  4. 与数据注释相比,单元测试要容易得多
  5. 它为大多数标准验证规则提供了出色的客户端验证支持

  • 这篇文章中有更多要点(http://www.webdevbros.net/2010/12/03/asp-net-mvc-fluent-validation-and-tesing/):1.太多的注释使你的模型看起来很难看(类似于你的观点3)2.更好的可重用性3.更好的性能(没有反射) (6认同)
  • @Idsa 性能点听起来很可疑。每个模型只需要发生一次反射。这假设一个很好的实现,我不知道这个特定的实现是如何工作的。 (2认同)
  • 我的第二个FluentValidation ......它摇滚.从代码OCD的角度来看,我喜欢它从视图中删除验证的责任,并给它自己的类.我在MVC1中尝试了xVal一段时间...数据注释对于简单的东西是好的,但是一旦你得到了一些规则,你就几乎无法分辨出ViewModel应该代表什么. (2认同)

Mar*_*ulz 28

我显然更喜欢数据注释,因为......

  1. 所有验证规则都可以在代码中的一个位置配置(在模型元数据类中),并且不需要在其他任何地方重复.
  2. 在使用Data Annotation属性时,对客户端验证(再次 - 不重复验证规则!)提供了极好的支持.
  3. 可以测试数据注释属性以确保它们存在.
  4. 社区创建了很好的附加验证属性(例如Data Annotations Extensions).

  • @Sam:通过测试属性是否使用Data Annotation属性进行修饰,您不会测试属性本身的功能; 你只是确定它在那里.我应该说现在,两年后,我在Darin身边并同意他的回答. (27认同)
  • 伟大的评论马吕斯.现在大多数EF教程太糟糕了,显示使用Data Annotations进行验证.我最初也被注释的简单性所吸引,但是在我尝试实现自定义验证规则后不久,我就立即跳过了Fluent验证团队......顺便说一句,Darin停止发布的内容太糟糕了:(大部分他在StackOverflow中的评论是在5年多之后发布的! (3认同)
  • 我认为大多数这些属性都可以通过某种形式的流畅验证来实现.我不知道OP中的库是否支持这个,但原则上它是可能的,也不是很难. (2认同)