Я пытаюсь сделать простую реализацию шаблона спецификации в слое моего домена.
Если у меня есть статический класс, полный спецификаций, подобных этому:
public static class FooSpecifications
{
public static Func<Foo, bool> IsSuperhuman
{
get
{
return foo => foo.CanShootLasersOutOfItsEyes && foo.CanFly;
}
}
}
Тогда яможет делать изумительные вещи, как это:
IEnumerable<Foo> foos = GetAllMyFoos();
var superFoos = foos.Where(FooSpecifications.IsSuperhuman);
Я также могу добавить метод bool в Foo, чтобы определить, соответствует ли конкретный экземпляр спецификации:
public bool Meets(Func<Foo, bool> specification)
{
return specification.Invoke(this);
}
Учитывая, что Foo, как и все моидоменные сущности, расширяет DomainObject, есть ли способ, которым я могу поместить общую реализацию Meets () в DomainObject, чтобы избавить меня от реализации Meets () отдельно в каждой сущности?