Я тоже использую шаблон спецификации.Это базовая реализация.
public class Specification<T, E> : ISpecification<T, E>
{
private Predicate<T> predicate;
public Specification(Predicate<T> predicate)
{
this.predicate = predicate;
}
public bool IsSatisfiedBy(T candidate)
{
return this.predicate.Invoke(candidate);
}
}
В этой реализации я просто передаю предикат в конструкторе, например:
var specification = new Specification<SomeDomainClass>(x => x.SomeDomainBoolMethod());
Вместо нескольких классов (по одному на каждыйусловия в моем домене), у меня есть несколько методов bool в моих бизнес-объектах.