ABP文檔筆記 - 規約

簡介

規約模式是一個特別的軟件設計模式,業務邏輯可使用boolean邏輯從新連接業務邏輯(維基百科).html

實踐中的大部分狀況,它是爲實體或其它業務對象,定義可複用的過濾器.算法

理解

在查詢操做中須要 提供一個邏輯運算表達式,也就是要提供一個返回布爾類型的算法函數。設計模式

在支持lambda表達式的C#的中,這類代碼寫起來很方便,也很簡練。框架

var count = _customerRepository.Count(c => c.Balance > 100000 && c.CreationYear == 2017);

但軟件開發中有DRY原則,當一段邏輯在多處代碼中出現時,就須要封裝一下避免重複拷貝,這就是規約模式的起點。函數

實現

接口定義

包含一個返回布爾結果的判別邏輯設計

public interface ISpecification<T>
{
    bool IsSatisfiedBy(T obj);
}

爲了能夠在Linq中使用, 這個接口中還要再增長一個返回表達式樹的方法。code

public interface ISpecification<T>
{
    bool IsSatisfiedBy(T obj);

    Expression<Func<T, bool>> ToExpression();
}

提供一些擴展方法

須要爲這個接口提供一些擴展方法,實現And,Or,Not 和 AndNot從而能夠組合規約。htm

相關文章
相關標籤/搜索