自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

流暢的驗(yàn)證組件:FluentValidation

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

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

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

未命名

現(xiàn)在我們可以開始體驗(yàn)了,實(shí)體類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.    } 

驗(yàn)證邏輯:

  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é)果:

驗(yàn)證結(jié)果

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

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

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

 

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

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

2010-08-12 13:34:13

Flex驗(yàn)證組件

2011-04-28 10:41:12

simpleframeSimple

2021-11-05 15:28:23

微軟驗(yàn)證器Authenticat

2021-03-12 16:35:33

鴻蒙HarmonyOS應(yīng)用

2021-11-17 15:37:43

鴻蒙HarmonyOS應(yīng)用

2021-09-14 08:38:57

組件開源前端

2013-08-12 10:15:34

2018-10-16 15:08:20

屏幕圖像對象

2013-04-15 14:46:48

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

2021-10-19 10:04:51

鴻蒙HarmonyOS應(yīng)用

2024-07-30 08:59:22

2023-12-08 08:02:40

開箱React?組件

2015-08-07 10:17:30

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

2020-06-01 14:33:27

語音技能智能

2022-11-03 07:49:52

JS原生元素

2021-10-10 21:46:32

Windows 10Windows微軟

2014-11-13 14:29:32

2011-04-22 10:13:35

SimpleFrame

2018-12-18 16:49:59

點(diǎn)贊
收藏

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