Martin Fowler が提案した Query Object パターンと Eric Evans が提案した Specification パターンの違いは何ですか?
2 に答える
クエリ オブジェクト
Fowler のクエリ オブジェクト パターン(エンタープライズ アプリケーション アーキテクチャのパターンp. 316) は、データベース クエリをドメイン言語で表現できるようにするインタープリター パターンの特殊化です。主に Fowler からの例:
QueryObject query = new QueryObject(Person.class);
query.addCriteria(Criteria.greaterThan("numberOfDependents", 0))
List<Person> persons = query.execute(unitOfWork);
Java Persistence API Criteria APIと Rails のActiveRecordクエリ インターフェイスは、このパターンの例です。
仕様
Evans の仕様パターン( Domain-Driven Design p. 224) は、別のオブジェクト、エンティティまたは値オブジェクトの述語を表すオブジェクトとしてビジネス ルールを実装します。Evans の例は、滞納している場合に true を返すInvoiceDelinquency
ブール メソッドを持つオブジェクトです。仕様は、オブジェクトの検証、コレクションのクエリ、または新しいオブジェクトの作成方法の指定など、いくつかの目的で使用できます。test(Invoice)
Invoice
違い
仕様は基本的に、Query Object パターンの一部である Criteria クラスと同じです。クエリ オブジェクトの説明では、条件がクエリを指定する以外の目的を持つことを意図していませんでしたが、同じプログラムで両方のパターンを使用した場合は、仕様をクエリ オブジェクトの条件として使用することをお勧めします。