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

相关文章
相关标签/搜索