ドメインレイヤーで仕様パターンの簡単な実装をしようとしています。
このような仕様でいっぱいの静的クラスがある場合:
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);
Fooにboolメソッドを追加して、特定のインスタンスが仕様を満たしているかどうかを判断することもできます。
public bool Meets(Func<Foo, bool> specification)
{
return specification.Invoke(this);
}
Fooは、すべてのドメインエンティティと同様に、DomainObjectを拡張しますが、Meets()の汎用実装をDomainObjectに入れて、Meets()をすべてのエンティティに個別に実装する手間を省く方法はありますか?