Martin Fowler提出的查询对象模式与Eric Evans提出的规范模式有什么区别?
Fowler的查询对象模式(企业应用程序体系结构模式,第316页)是Interpreter模式的一种特殊化,它允许以域语言呈现数据库查询.一个主要来自福勒的例子:
QueryObject query = new QueryObject(Person.class); query.addCriteria(Criteria.greaterThan("numberOfDependents", 0)) Listpersons = query.execute(unitOfWork);
在Java持久性API标准API和Rails的ActiveRecord的查询界面是这种模式的例子.
Evans的规范模式(Domain-Driven Design p.224)将业务规则实现为表示另一个对象,实体或值对象的谓词的对象.Evans的例子是一个InvoiceDelinquency
带有布尔方法的对象,test(Invoice)
如果Invoice
是拖欠的话,它返回true .规范可用于以下几个方面:验证对象,查询集合或指定如何创建新对象.
规范与作为查询对象模式一部分的Criteria类基本相同.查询对象描述并不意味着Criteria具有除指定查询之外的任何其他目的,但如果您在同一程序中使用这两种模式,则您当然希望将规范用作查询对象的标准.