【问题标题】:Fluent Validation vs. Data Annotations流利的验证与数据注释
【发布时间】:2011-10-12 01:21:55
【问题描述】:

当用于 ASP.NET MVC 验证时,这两个验证包在操作上有何不同?它们似乎有相似的对象,一直到它们的对象名称。一个与另一个有关吗?他们有什么区别?这些差异以何种方式表示不同的用例?

【问题讨论】:

  • 值得注意的是,被关闭的非建设性问题通常有很多赞成票,因此它们实际上对人们有帮助。这件事一定有问题
  • 我同意这类问题很有用,但下面的答案对我来说更像是意见,而不是事实。
  • 我也完全同意,但是问“有什么区别”而不是“你的偏好是什么”可能会避免这种情况。
  • 我认为交易是你必须说出它,以便答案更少基于意见而不是事实。不要问“你最喜欢什么?”但是“两者之间的操作差异是什么?”然后你不会得到“我更喜欢 Fluent Validation”这样的答案。而是首先突出差异,然后呈现发现的事物。

标签: .net asp.net-mvc data-annotations fluentvalidation


【解决方案1】:

我显然更喜欢 Data Annotations 因为 ...

  1. 所有验证规则都可以在代码中的一个位置(在模型元数据类中)配置,无需在其他任何地方重复。
  2. 在使用 Data Annotation 属性时,对客户端验证(同样——无需重复验证规则!)提供了出色的支持。
  3. Data Annotation 属性可以进行测试以确保它们存在。
  4. 社区创建了一些不错的附加验证属性(例如Data Annotations Extensions)。

【讨论】:

  • 我认为这些属性中的大部分都可以通过某种形式的流利验证来实现。我不知道 OP 中的库是否支持这一点,但原则上这是可能的,也不是很难。
  • 测试属性是否存在的意义何在?这不是基本上重复验证规则吗?
  • @Sam:通过测试属性是否被Data Annotation 属性修饰,你不需要测试属性本身的功能;你只是确保它在那里。我应该说,两年后的现在,我站在达林一边,同意他的回答。
  • @Sam,因为您可能想知道是否有人将其从您的模型中删除。
  • 伟大的评论马吕斯。太糟糕了,现在大多数 EF 教程都显示了使用数据注释完成的验证。我最初也被注释的简单性所吸引,但在我尝试实现自定义验证规则后不久,我立即加入了 Fluent Validation 团队......顺便说一句,Darin 停止发布太糟糕了:(他在 StackOverflow 中的 cmets 在 5 年多之后才出现!!!
【解决方案2】:

我更喜欢Fluent Validation

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

【讨论】:

  • 这篇 (webdevbros.net/2010/12/03/…) 文章的更多观点: 1. 注释过多会使您的模型看起来很丑(类似于您的观点 3) 2. 更好的可重用性 3. 更好的性能(因为没有反射)
  • @Idsa 性能点听起来很可疑。每个模型只需要发生一次反射。这假设一个很好的实现,我不知道这个特定的实现是如何工作的。
  • @CodeInChaos,看起来你是对的。但我会保留它,因为我也不确定(并且懒得去了解)它是如何实现的。
  • 我支持 FluentValidation...它很震撼。从代码 OCD 的角度来看,我喜欢它从视图中移除验证的责任并为其提供自己的类。我在 MVC1 中尝试了 xVal 一段时间...对于简单的东西,数据注释是可以的,但是一旦你获得了多个规则,你就几乎无法判断 ViewModel 应该代表什么。
  • @Darin 如何在视图中传递错误消息?可以举个例子吗?
猜你喜欢
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
相关资源
最近更新 更多