寫該系列緣由是因為之前在國慶無聊實現了一個對象驗證的小庫,
并希望博客園內的大神能批評教育一下我的這個庫,讓我能成長一些。
但是估計由于我沒有介紹庫的內容以及我的思路,只是給出了代碼,
大神們對此沒太大的興趣,
所以最近開始我會寫一個幾篇簡單介紹性文章的系列來闡述該庫的內容。
希望有幸能被大神們看見并給予我一些批評。
0) 目錄以及庫結構介紹
1) 接口介紹以及總體思路概述
2) 驗證器實現
3) Fluent以及擴展方法實現
本人是設想庫的使用者可以用 Fluent 的方式創建對象的驗證規則,
并且庫由于不太涉及.net不同設備平臺的特有代碼,所以我是使用Portable 方式編寫該庫。
設想的庫使用方式代碼如下:
Container.Init(); // Only need init in your app once,目的是綁定類型與接口var builder = Validation.NewValidatorBuilder<Student>(); // 創建驗證創建者b.RuleFor(i => i.Age) .Must(i => i >= 0 && i <= 18) .OverrideName("student age") .OverrideError("not student") .ThenRuleFor(i => i.Name) .Must(i => !string.IsNullOrWhiteSpace(i)) .OverrideName("student name") .OverrideError("no name");// 設置驗證規則 var v = builder.Build(); // 利用創建者創建驗證器var student = new Student() { Age = 13, Name = "v" }; // 驗證對象數據var context = Validation.CreateContext(student); // 創建驗證上下文,因為上下文中有執行相關的參數var result = v.Validate(context); // 使用驗證器驗證student數據Assert.IsNotNull(result);Assert.True(result.IsValid);Assert.True(result.Failures.Count == 0); // 驗證結果的對比測試
項目結構如下圖:
UnitTest :單元測試代碼 (這個不用介紹了吧)
ObjectValidater :庫只有這一個項目
目前該庫只有一個依賴 Autofac,由于解耦接口和具體實現:
<package id="Autofac" version="3.5.2" targetFramework="portable-net40+sl50+win80+wp80+wpa81" />
NEXT: 1) 接口介紹以及總體思路概述
新聞熱點
疑難解答