流暢的驗證元件 FluentValidation

2021-09-22 10:50:31 字數 1581 閱讀 5222

進入今天的主題首先如果你還沒有這款元件,你可以利用vs2010的nuget安裝,(如果不會的請安裝上篇開源database元件:fluentmigrator中提到的方式安裝),命令為:

現在我們可以開始體驗了,實體類do任然是上節的orders:

do:public

class  orders 

public

string customerid  

public

decimal discount  

public datetime orderdate  

}

驗證邏輯:

public

class  ordersvalidator:abstractvalidator

}

看見這樣的**你的感覺如何?現在式的語言講究的不僅在於功能,還有語義。

下面我們來寫個簡單的測試類測試它:

[testmethod] 

public

void testmethod1() 

; ivalidator validator = 

new ordersvalidator(); 

var results = validator.validate(orders); 

var validationsucceeded = results.isvalid; 

var failures = results.errors; 

assert.istrue(failures.any(t => t.propertyname == 

"customerid

")); 

assert.istrue(failures.any(t => t.propertyname == 

"discount

")); 

assert.istrue(failures.any(t => t.propertyname == 

"orderdate.date

")); 

failures.tolist().foreach(t=>debug.writeline(t.errormessage)); 

}

結果:

單元測試結果就不貼了,覺得多餘。

最後忘說了這款元件為我們提供了很多語言的多語言支援:

我在思考對於架構設計中我們採用的驗證元件可以任意切換,我們完全可以為vab,fluentvalidation同一抽象介面做個門面模式。在借助於ioc插入式架構,利用不同的key,獲取驗證元件介面,而這個key值我將會處理在方法的attribute上,aop方式橫切於我們的應用程式,驗證本來就是個業務功能元件,橫切點。我也是正在如此引用我的架構。

form元件的驗證

django 的form元件可以實現自定義的驗證規則。建立基於form的類,在類中建立字段,定義規則。建立該類的物件,並將待驗證的資料傳入,使用is valid 函式。is valid 函式的原始碼實現是 通過full clean 函式挖出存在的errors並返回,如果沒錯誤,則返回true。校驗多...

entlib驗證元件

using system using system.collections.generic using system.linq using system.text using system.threading.tasks using microsoft.practices.enterpriselib...

流暢的python 《流暢的python》第一天

我們看到 python 可以用len 或者arr 0 它們是怎麼實現的,其實就是兩個魔法方法 len 和 getitem 用撲克牌的例子學習一下,我們知道知道撲克牌有花色 黑桃,紅桃,方塊,梅花 有大小 2 10 jqka 如何創造一套牌的物件呢?首先學習collections的namedtuple...