あるエンティティに対して、何らかの条件を満たすものをグループとして扱いたいことがよくあります。安直な実装としては、条件を加味してエンティティを抽出するようなメソッドをリポジトリに追加する方法をとってしまうかもしれません。 このようにリポジトリにメソッドを持たせてしまうと、条件が集合操作の中に埋もれてしまい、再利用しづらくなります。そこでDDDではSpecification(仕様)としてこういった条件をくくり出すパターンが紹介されています。『エリック・エヴァンスのドメイン駆動設計』p.229「仕様の適用と実装」では、次のように書かれています。 仕様の価値の多くは、全く異なるように見えるアプリケーションの機能を統一することにある。以下に挙げる3つの目的のうち、1つでも当てはまれば、オブジェクトの状態を(筆者注:仕様として)定義する必要があるだろう。 オブジェクトを検証して、何らかの要求を満たし
![Practical DDD #1: Specificationパターンの例](https://cdn-ak-scissors.b.st-hatena.com/image/square/fd5dd1255f6db8b7375ba61cbf515208298afc24/height=288;version=1;width=512/https%3A%2F%2F64.media.tumblr.com%2F4b8a03aac22cebbee73a25458e6253e1%2F1a233a5443abb062-6e%2Fs500x750%2Fbd75f866b85b8110e11de2676173a0be85f72084.png)