寫該系列緣由是因為之前在國慶無聊實現了一個對象驗證的小庫,
並希望博客園內的大神能批評教育一下我的這個庫,讓我能成長一些。
但是估計由於我沒有介紹庫的內容以及我的思路,只是給出了代碼,
大神們對此沒太大的興趣,
所以最近開始我會寫一個幾篇簡單介紹性文章的系列來闡述該庫的內容。
希望有幸能被大神們看見並給予我一些批評。
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) 接口介紹以及總體思路概述