流利的验证与数据注释[关闭]


123

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


52
还值得注意的是,封闭性问题不是建设性的,通常会有很多反对意见,因此它们实际上对人们有帮助。这件事
肯定

2
我同意这类问题很有用,但以下答案对我来说似乎更像是看法,而不是事实。
伊恩·沃伯顿

3
我也完全同意,但是问“有什么区别”而不是“您的喜好是什么”可能会避免这种情况。
杰里米·A·韦斯特

我认为这是您必须措辞的措辞,以便答案较少基于观点,而不是事实。不要问,“你最喜欢什么?” 但是“两者之间的手术区别是什么?” 这样一来,您将不会得到“我更喜欢流利的验证”之类的答案。但是相反,首先是前景有所不同,然后是发现的事物。
鲁芬

Answers:


113

我更喜欢流利的验证

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

6
本文(webdevbros.net/2010/12/03/…)文章中的其他几点:1.过多的注释使您的模型看起来难看(类似于您的观点3)2.更好的可重用性3.更好的性能(没有反射) )
SiberianGuy

2
@Idsa性能要点听起来令人怀疑。每个模型只需要进行一次反射。这假设一个好的实现,我不知道这个特定实现是如何工作的。
CodesInChaos 2011年

@CodeInChaos,看来您是对的。但是我会把它保留在那里,因为我也不确定(并且懒得找出来)它是如何实现的。
SiberianGuy

2
我第二次FluentValidation ...动摇了。从代码OCD的角度来看,我喜欢它从视图中消除了验证的责任,并为其提供了自己的类。我在MVC1中尝试了xVal一段时间...对于简单的东西来说,数据注释还不错,但是一旦获得了很少的规则,您几乎无法分辨ViewModel应该代表什么。
布兰登·林顿

@Darin您如何在视图中传递错误消息?您能举个例子吗?
Jaime Sangcap 2014年

32

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

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

2
我认为大多数这些属性都可以通过某种形式的流利验证来实现。我不知道OP中的库是否支持此功能,但原则上这是可能的,而且也不是很难。
CodesInChaos 2011年

测试属性是否存在的重点是什么?这基本上不是重复验证规则吗?
2013年

30
@Sam:通过测试属性是否用Data Annotation属性修饰,您无需测试属性本身的功能;您只是确保它在那里。我应该说,两年后的现在,我站在达林的身边,并同意他的回答。
Marius Schulz 2013年

@Sam,因为您可能想知道是否有人将其从模型中删除。
史蒂夫

3
伟大的评论马吕斯。如今,最糟糕的是大多数EF教程都显示了使用数据注释进行的验证。最初,我还被注释的简单性吸引住了,但是在尝试实现自定义验证规则后不久,我立即加入了Fluent Validation团队...顺便说一句,太糟糕了,Darin停止了发布:(他在StackOverflow中的评论已超过5年了!!!
Koshera '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.