首页 > 流畅的验证组件:FluentValidation

流畅的验证组件:FluentValidation

       这里要介绍一款与企业库VAB(Validation Application Block),ASP.NET MVC基于Attribute声明式验证所不同的验证组件,FluentValidation,其利用表达式语法链式编程,使得验证组件与实体分开。我喜欢他的原因是喜欢表达式,喜欢链式的感觉,大有一气呵成之意。

    进入今天的主题首先如果你还没有这款组件,你可以利用VS2010的NuGet安装,(如果不会的请安装上篇开源DataBase组件:FluentMigrator中提到的方式安装),命令为:

未命名

 

  现在我们可以开始体验了,实体类do任然是上节的Orders:

do:

public  class  Orders 

   { 

       public int ID { getset; } 



       public string CustomerID { getset; } 



       public decimal DisCount { getset; } 



       public DateTime OrderDate { getset; } 

   }

 

验证逻辑:

public  class  OrdersValidator:AbstractValidator 

    { 

        public  OrdersValidator() 

        { 

            RuleFor(orders => orders.CustomerID).NotEmpty().Length(220).WithName("CustomerID"); 

            RuleFor(orders => orders.DisCount).GreaterThanOrEqualTo(0).LessThan(1).WithMessage("discount must between 0 and 1!"); 

            RuleFor(orders => orders.OrderDate.Date).GreaterThanOrEqualTo(DateTime.Now.Date).WithName("Order Date"); 

        } 

    }

看见这样的代码你的感觉如何?现在式的语言讲究的不仅在于功能,还有语义。

下面我们来写个简单的测试类测试它:

[TestMethod] 

       public void TestMethod1() 

       { 

           var orders = new Orders(){DisCount = 2,CustomerID = "1", OrderDate = DateTime.Now.AddDays(-1).Date}; 

           IValidator validator = new OrdersValidator(); 

           var results = validator.Validate(orders); 



           var validationSucceeded = results.IsValid; 

           var failures = results.Errors; 

           Assert.IsTrue(failures.Any(t => t.PropertyName == "CustomerID")); 

           Assert.IsTrue(failures.Any(t => t.PropertyName == "DisCount")); 

           Assert.IsTrue(failures.Any(t => t.PropertyName == "OrderDate.Date")); 

           failures.ToList().ForEach(t=>Debug.WriteLine(t.ErrorMessage)); 

       }

    

结果:

验证结果

单元测试结果就不贴了,觉得多余。

   最后忘说了这款组件为我们提供了很多语言的多语言支持:

     我在思考对于架构设计中我们采用的验证组件可以任意切换,我们完全可以为VAB,FluentValidation同一抽象接口做个门面模式。在借助于IOC插入式架构,利用不同的key,获取验证组件接口,而这个key值我将会处理在方法的Attribute上,AOP方式横切于我们的应用程序,验证本来就是个业务功能组件,横切点。我也是正在如此引用我的架构。

更多相关:

  • 在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?1、在Startup类中读取json配置文件1、使用Confi...

  •   1 public class FrameSubject extends JFrame {   2    3   …………..   4    5   //因为无法使用多重继承,这儿就只能使用对象组合的方式来引入一个   6    7   //java.util.Observerable对象了。   8    9   DateSub...

  • 本案例主要说明如何使用NSwag 工具使用桌面工具快速生成c# 客户端代码、快速的访问Web Api。 NSwagStudio 下载地址 比较强大、可以生成TypeScript、WebApi Controller、CSharp Client  1、运行WebApi项目  URL http://yourserver/swagger 然后...

  •   在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性.   ModelState 在ApiController中一个ModelState属性用来获取参数验证结果.   public abstract class ApiController : IHttpController,...

  • 1# 引用  C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.dll C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.Applicati...

  • kuapingUI 2.2 版本发布,增加了一个比较实用的工具栏web组件,是由分享按钮组 + 联系按钮组构成,分享按钮组包含了 QQ空间、朋友圈、QQ、微信、微博等分享;联系按钮组包含了 微信、QQ、旺旺、Skype、电话等快捷沟通方式。演示地址 跨屏UI框架-响应式前端框架_基于Bootstrap的大组件UI框架​ui.kuapi...

  • 本篇文章主要介绍了vue 的keep-alive缓存功能的实现,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。#Vue 实现组件信息的缓存当我们在开发vue的项目过程中,避免不了在路由切换到其他的component再返回后该组件数据会重新加载,处理这种情况我们就需要用到keep-a...

  • 2020年Vue面试题Interview●●●●作者:@烦恼会解决烦恼vue核心知识——理论篇1、对于Vue是一套渐进式框架的理解渐进式代表的含义是:主张最少。Vue可能有些方面是不如React,不如Angular,但它是渐进的,没有强主张,你可以在原有大系统的上面,把一两个组件改用它实现,当jQuery用;也可以整个用它全家桶开...

  • app.component.html

    父组件字号:{{fontSizePx}}px

    app.component.ts ...fontSizePx=12...

  • app.component.html  app.component.ts import { Component } from '@angular/core'; @Component({selector: 'a...

  • http://outofmemory.cn/code-snippet/8408/python-regular-expression-replace-sub-method   我验证了它的方法,可行...

  • JavaScript 表单 JavaScript 表单验证 HTML 表单验证可以通过 JavaScript 来完成。   以下实例代码用于判断表单字段(fname)值是否存在,如果存在,则弹出信息,否则阻止表单提交: JavaScript 实例 function validateForm() { var x = document...

  • 1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法、有效的.Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证:Struts2 提供了一些基于 XWork Validation Framework 的内建验证程序. 使用这些验证程序不需要编程, 只要...

  • 链接地址:http://blog.csdn.net/tjcyjd/article/details/48416405 验证数字:^[0-9]*$验证n位的数字:^d{n}$验证至少n位数字:^d{n,}$验证m-n位的数字:^d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验证有两位小数的正实数:^[0-9...

  •   不少朋友在登陆DedeCMS后台的时候遇到验证码错误的问题,明明已经正确输入了,却提示错误,导致登录不进后台。如果遇到这个问题,可以通过下面的方法检测修复。 1、空间满了。我遇到的验证码错误都是空间满了,如果也遇到验证码错误的问题,可以先检查是否空间满了。 2、用ftp进入你的dedecms程序空间,把data/session目...