为什么使用fluentvalidation而不是ASP.NET MVC验证

Dav*_*idS 26 validation fluentvalidation-2.0 asp.net-mvc-3

在哪种情况下你会选择FluentValidation(FV)而不是ASP.NET MVC 3方式

FV相对于MVC有什么优势?我意识到,对于后者,我们必须编写更多的代码,并且可以使用数据注释来丢弃代码.而且,使用FV编写自定义验证似乎比使用MVC更容易.但是,使用MVC可以使用数据注释并插入jQuery验证.

那么你认为什么会让你选择一个而不是另一个呢?有没有你甚至可以使用两者的情况?

Ste*_*kes 31

流畅验证是设置专用验证器对象的一种方法,当您希望将验证逻辑与业务逻辑分开时,可以使用这些对象.面向方面编程(AOP)范例可以分离系统内的横切关注点,验证就是这样一个问题.分离验证有助于清理域代码并使其更具凝聚力,并为您提供一个查找验证逻辑的位置.

MVC注释驱动的验证是一种非常"便宜"的方式,可以在应用程序中获得一些基本验证,而无需创建专用验证器对象的麻烦,创建一个验证系统来组织它们并将它们全部插入.设置非常简单,但可以使您的域对象不那么干净.

对于可以使用注释处理所有验证逻辑的小型系统,我建议只使用注释,因为它们很容易设置.对于更大,更复杂的系统,我建议使用验证器对象分离验证问题.

我个人喜欢使用这两种方法:向ViewModel类添加验证属性(这意味着注释不会使我的域对象混乱),以及在我的域层中具有专用的验证器对象.这是一个少量的重复,但使用注释是如此快速和简单,我觉得值得额外的维护成本.

  • +1 特别是对于第三和第四段。我经常看到人们把事情变得过于复杂,而在现实世界中(人们实际上必须在某个时候交付一些东西)使解决方案适合问题很重要。你的方法听起来是一种值得称赞的务实方法。 (2认同)
  • @DavidS - 我的意思是内置的验证器类型,是的 - 虽然我假设一旦你克服了使用自定义验证器的困难,它们也会非常便宜.FV通过类级"Validator"属性为您提供"一个验证系统,可以组织[验证器]并将它们全部插入",从而减少麻烦; 我仍然说决定采取哪条路线的驱动因素应该是所需验证的复杂性. (2认同)