2011-07-24 70 views
93

您更喜欢哪种方法来进行ASP.NET MVC验证?为什么? Fluent ValidationData annotations?任何其他?Fluent验证与数据注释

+132

我讨厌这个关于StackExchange的“不建设性”的东西。我很确定StackOverflow是问这类问题的最佳地点,因为这里有很多有真正经验和丰富知识的人。 – SiberianGuy

+39

还有一点很有趣,值得注意的是,那些不具有建设性的问题通常会有很多upvotes,所以它们实际上对人有帮助。这件事有一定的问题 – Dmitry

+4

“封闭不具有建设性”......我在下面的答案中看到大量的事实! – felickz

回答

89

我喜欢Fluent Validation

  1. 它给我的我的验证规则
  2. 做不同性质的条件验证更好的控制容易得多相比,数据注释
  3. 它分离验证从我的视图模型
  4. Unit testing与数据注释相比要容易得多
  5. 它具有优秀的客户端验证支持大多数标准验证规则
+6

从这个更多的观点来看(http://www.webdevbros.net/2010/12/03/asp-net-mvc-fluent-validation-and-tesing /)文章:1.太多的注释让你的模型看起来很丑(类似于你的观点3)2.更好的可重用性3.更好的性能(作为不反射) – SiberianGuy

+0

@Idsa性能点听起来很可疑,只需要在每个模型中进行一次反射,这假设一个好的实现,我不知道这个特定的实现是如何工作的。 – CodesInChaos

+0

@CodeInChaos,看起来像你是对的。但我会保留在那里,因为我也不确定(也懒得发现)它是如何实现的。 – SiberianGuy

17

我明明喜欢数据注释因为......

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

我认为大多数这些属性都可以通过某种形式的流畅验证来实现。我不知道OP中的图书馆是否支持这一功能,但原则上这是可能的,也不是很难。 – CodesInChaos

+0

什么是测试属性的存在点?这不是基本上重复验证规则? – Sam

+23

@Sam:通过测试属性是否使用数据注解属性进行修饰,您不会测试属性本身的功能;你只是确保它在那里。我现在应该说,现在,两年后,我在达林身边并同意他的回答。 –