规约模式是一个特别的软件设计模式,业务逻辑可以使用boolean逻辑重新链接业务逻辑(维基百科).

实践中的大部分情况,它是为实体或其它业务对象,定义可复用的过滤器.

理解

在查询操作中需要 提供一个逻辑运算表达式,也就是要提供一个返回布尔类型的算法函数。

在支持lambda表达式的C#的中,这类代码写起来很方便,也很简练。

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

但软件开发中有DRY原则,当一段逻辑在多处代码中出现时,就需要封装一下避免重复拷贝,这就是规约模式的起点。

实现

接口定义

包含一个返回布尔结果的判别逻辑

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

为了可以在Linq中使用, 这个接口中还要再增加一个返回表达式树的方法。

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

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

提供一些扩展方法

需要为这个接口提供一些扩展方法,实现And,Or,Not 和 AndNot从而可以组合规约。

相关文章:

  • 2021-08-12
  • 2021-09-07
  • 2021-06-16
  • 2021-07-29
  • 2021-11-17
  • 2022-02-05
  • 2022-02-12
猜你喜欢
  • 2021-12-15
  • 2021-12-27
  • 2021-09-03
  • 2021-09-16
  • 2021-08-27
  • 2021-10-28
  • 2021-10-08
相关资源
相似解决方案