程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 實現一個對象驗證庫系列 (請大神批評),大神

實現一個對象驗證庫系列 (請大神批評),大神

編輯:C#入門知識

實現一個對象驗證庫系列 (請大神批評),大神


緣由

寫該系列緣由是因為之前在國慶無聊實現了一個對象驗證的小庫,

並希望博客園內的大神能批評教育一下我的這個庫,讓我能成長一些。

但是估計由於我沒有介紹庫的內容以及我的思路,只是給出了代碼,

大神們對此沒太大的興趣,

所以最近開始我會寫一個幾篇簡單介紹性文章的系列來闡述該庫的內容。

希望有幸能被大神們看見並給予我一些批評。

系列目錄

0) 目錄以及庫結構介紹

1) 接口介紹以及總體思路概述

2) 驗證器實現

3) Fluent以及擴展方法實現

 

本片正文 :庫結構介紹

(0)庫介紹

本人是設想庫的使用者可以用 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);  // 驗證結果的對比測試

(1)庫代碼結構介紹

 項目結構如下圖:

UnitTest :單元測試代碼 (這個不用介紹了吧)

ObjectValidater :庫只有這一個項目

  • Base : 驗證規則,規則創建者,規則選擇器,驗證器等實際實現代碼
  • Checkers :各種驗證方式的具體實現
  • Common :與庫業務定義或者邏輯無關,提供便利地公用擴展方法或者類的實現
  • Entities :驗證上下文,驗證結果定義
  • Interfaces :各種接口的定義
  • Container 類:用於接口與實現類型綁定的解耦設置靜態類
  • Syntax 類:提供Fluent使用方式的擴展方法定義
  • Validation 類:因為想將接口與實際實現解耦,所以不便於讓用戶自行 new 對象,只能提供創建的靜態類

(2)項目依賴

目前該庫只有一個依賴 Autofac,由於解耦接口和具體實現:

  <package id="Autofac" version="3.5.2" targetFramework="portable-net40+sl50+win80+wp80+wpa81" />

 

 

NEXT: 1) 接口介紹以及總體思路概述

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved