成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

流暢的驗證組件:FluentValidation

開發(fā) 后端 開發(fā)工具
這里要介紹一款與企業(yè)庫VAB(Validation Application Block),ASP.NET MVC基于Attribute聲明式驗證所不同的驗證組件,F(xiàn)luentValidation,其利用表達(dá)式語法鏈?zhǔn)骄幊蹋沟抿炞C組件與實體分開。我喜歡他的原因是喜歡表達(dá)式,喜歡鏈?zhǔn)降母杏X,大有一氣呵成之意。

這里要介紹一款與企業(yè)庫VAB(Validation Application Block),ASP.NET MVC基于Attribute聲明式驗證所不同的驗證組件,F(xiàn)luentValidation,其利用表達(dá)式語法鏈?zhǔn)骄幊蹋沟抿炞C組件與實體分開。我喜歡他的原因是喜歡表達(dá)式,喜歡鏈?zhǔn)降母杏X,大有一氣呵成之意。

進(jìn)入今天的主題首先如果你還沒有這款組件,你可以利用VS2010的NuGet安裝,(如果不會的請安裝上篇開源DataBase組件:FluentMigrator中提到的方式安裝),命令為:

未命名

現(xiàn)在我們可以開始體驗了,實體類do任然是上節(jié)的Orders:

do:

  1. public  class  Orders   
  2.    {   
  3.        public int ID { get; set; }   
  4.        public string CustomerID { get; set; }   
  5.        public decimal DisCount { get; set; }   
  6.        public DateTime OrderDate { get; set; }   
  7.    } 

驗證邏輯:

  1. public  class  OrdersValidator:AbstractValidator<Orders>   
  2.     {   
  3.         public  OrdersValidator()   
  4.         {   
  5.             RuleFor(orders => orders.CustomerID).NotEmpty().Length(2, 20).WithName("CustomerID");   
  6.             RuleFor(orders => orders.DisCount).GreaterThanOrEqualTo(0).LessThan(1).WithMessage("discount must between 0 and 1!");   
  7.             RuleFor(orders => orders.OrderDate.Date).GreaterThanOrEqualTo(DateTime.Now.Date).WithName("Order Date");   
  8.         }   
  9.     } 

看見這樣的代碼你的感覺如何?現(xiàn)在式的語言講究的不僅在于功能,還有語義。

下面我們來寫個簡單的測試類測試它:

  1. [TestMethod]   
  2.        public void TestMethod1()   
  3.        {   
  4.            var orders = new Orders(){DisCount = 2,CustomerID = "1", OrderDate = DateTime.Now.AddDays(-1).Date};   
  5.            IValidator validator = new OrdersValidator();   
  6.            var results = validator.Validate(orders);   
  7.  
  8.            var validationSucceeded = results.IsValid;   
  9.            var failures = results.Errors;   
  10.            Assert.IsTrue(failures.Any(t => t.PropertyName == "CustomerID"));   
  11.            Assert.IsTrue(failures.Any(t => t.PropertyName == "DisCount"));   
  12.            Assert.IsTrue(failures.Any(t => t.PropertyName == "OrderDate.Date"));   
  13.            failures.ToList().ForEach(t=>Debug.WriteLine(t.ErrorMessage));   
  14.        } 

結(jié)果:

驗證結(jié)果

單元測試結(jié)果就不貼了,覺得多余。

***忘說了這款組件為我們提供了很多語言的多語言支持:

我在思考對于架構(gòu)設(shè)計中我們采用的驗證組件可以任意切換,我們完全可以為VAB,F(xiàn)luentValidation同一抽象接口做個門面模式。在借助于 IOC插入式架構(gòu),利用不同的key,獲取驗證組件接口,而這個key值我將會處理在方法的Attribute上,AOP方式橫切于我們的應(yīng)用程序,驗證本來就是個業(yè)務(wù)功能組件,橫切點。我也是正在如此引用我的架構(gòu)

 

原文鏈接:http://www.cnblogs.com/whitewolf/archive/2012/05/27/2520593.html

責(zé)任編輯:林師授 來源: 博客園
相關(guān)推薦

2010-08-12 13:34:13

Flex驗證組件

2021-11-05 15:28:23

微軟驗證器Authenticat

2011-04-28 10:41:12

simpleframeSimple

2021-03-12 16:35:33

鴻蒙HarmonyOS應(yīng)用

2013-08-12 10:15:34

2018-10-16 15:08:20

屏幕圖像對象

2013-04-15 14:46:48

Android應(yīng)用Android流暢性

2021-09-14 08:38:57

組件開源前端

2021-11-17 15:37:43

鴻蒙HarmonyOS應(yīng)用

2021-10-19 10:04:51

鴻蒙HarmonyOS應(yīng)用

2020-06-01 14:33:27

語音技能智能

2015-08-07 10:17:30

云應(yīng)用云計算架構(gòu)流暢云計算

2022-11-03 07:49:52

JS原生元素

2021-10-10 21:46:32

Windows 10Windows微軟

2024-07-30 08:59:22

2014-11-13 14:29:32

2017-09-10 17:31:18

iOS渲染數(shù)據(jù)

2023-10-06 14:27:10

Linux系統(tǒng)監(jiān)控

2022-07-05 07:02:59

iOS 系統(tǒng)安卓墓碑機制
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 人人做人人澡人人爽欧美 | 黄色网毛片 | 一道本不卡 | 国产午夜一级 | 国产亚洲网站 | 91精品国产91久久久久福利 | 欧美成人免费在线视频 | 欧美高清一区 | 美女一级a毛片免费观看97 | 欧美色专区 | 亚洲美女一区 | 欧美日韩精品影院 | 每日更新av | 国产成人免费在线 | 天堂色网| 殴美黄色录像 | 国产精品毛片无码 | 久久久久国产一区二区 | 毛片在线免费 | 国产在线观看av | 欧美一区二区视频 | 成人欧美一区二区三区在线观看 | 免费看黄色片 | 黄色在线免费观看 | 在线播放精品视频 | 精品久久香蕉国产线看观看亚洲 | 精品日韩电影 | 91在线色视频 | 国产精品免费在线 | 久久综合一区 | 国外成人在线视频 | 国产一级精品毛片 | 一级电影免费看 | 一级免费a | 国产一区二区精品在线观看 | 久久精品成人热国产成 | 自拍 亚洲 欧美 老师 丝袜 | 自拍视频在线观看 | 精品一区二区在线观看 | 欧美在线小视频 | 免费国产一区二区 |