av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

流暢的驗證組件:FluentValidation

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

為肇州等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及肇州網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站設計、成都做網(wǎng)站、肇州網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

進入今天的主題首先如果你還沒有這款組件,你可以利用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 
  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.            var validationSucceeded = results.IsValid; 
  8.            var failures = results.Errors; 
  9.            Assert.IsTrue(failures.Any(t => t.PropertyName == "CustomerID")); 
  10.            Assert.IsTrue(failures.Any(t => t.PropertyName == "DisCount")); 
  11.            Assert.IsTrue(failures.Any(t => t.PropertyName == "OrderDate.Date")); 
  12.            failures.ToList().ForEach(t=>Debug.WriteLine(t.ErrorMessage)); 
  13.        }

結(jié)果:

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

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

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


網(wǎng)站欄目:流暢的驗證組件:FluentValidation
文章出自:http://uogjgqi.cn/article/dpcocdd.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流