I'm trying to do a simple implementation of the Specification pattern in my domain layer.
If I have a static class full of specifications like this:
public static class FooSpecifications
{
public static Func<Foo, bool> IsSuperhuman
{
get
{
return foo => foo.CanShootLasersOutOfItsEyes && foo.CanFly;
}
}
}
Then I can do marvellous things like this:
IEnumerable<Foo> foos = GetAllMyFoos();
var superFoos = foos.Where(FooSpecifications.IsSuperhuman);
I can also add bool method to Foo to determine if a particular instance meets a specification:
public bool Meets(Func<Foo, bool> specification)
{
return specification.Invoke(this);
}
Given that Foo, like all my domain entities, extends DomainObject, is there a way I can put a generic implementation of Meets() into the DomainObject to save me implementing Meets() separately in every entity?