[英]Query Object Pattern (Design Pattern)
我需要在Java中为我的可自定义搜索界面(我正在编写的webapp)实现一个查询对象模式。
有谁知道我在哪里可以获得查询对象模式(Martin Fowler的QoP)的示例/教程?
提前致谢
加成如何查询模式添加到现有的DAO模式?
“查询对象模式”中的“模式”一词是(IMHO)放错位置的。 这不是一个真正的设计模式。 “查询对象”只是解释器模式的另一个例子。 传统的Hibernate Criteria API和现代JPA2 Criteria API是一个很好的例子,它将它与Builder Pattern结合在一起。
至于你的问题:
如何将查询模式添加到现有DAO模式?
我建议看看JPA2 。
查询对象
表示数据库查询的对象。
有关完整说明,请参见此处
SQL可以是一种涉及的语言,许多开发人员并不是特别熟悉它。 此外,您需要知道数据库模式形成查询的样子。 您可以通过创建隐藏参数化方法中的SQL的专用查找器方法来避免这种情况,但这使得难以形成更多的即席查询。 如果数据库架构发生更改,它还会导致SQL语句重复。
查询对象是一个解释器[Gang of Four],即可以将自身形成为SQL查询的对象结构。 您可以通过引用类和字段而不是表和列来创建此查询。 通过这种方式,编写查询的人可以独立于数据库模式执行此操作,并且可以将对模式的更改本地化在一个位置。
我在这里为NHibernate编写了一个C#实现: https : //github.com/shaynevanasperen/NHibernate.Sessions.Operations 。
它通过使用这样的接口工作:
public interface IDatabases
{
ISessionManager SessionManager { get; }
T Query<T>(IDatabaseQuery<T> query);
T Query<T>(ICachedDatabaseQuery<T> query);
void Command(IDatabaseCommand command);
T Command<T>(IDatabaseCommand<T> command);
}
给定像这样的POCO实体类:
class Database1Poco
{
public int Property1 { get; set; }
public string Property2 { get; set; }
}
您可以像这样构建查询对象:
class Database1PocoByProperty1 : DatabaseQuery<Database1Poco>
{
public override Database1Poco Execute(ISessionManager sessionManager)
{
return sessionManager.Session.Query<Database1Poco>().SingleOrDefault(x => x.Property1 == Property1);
}
public int Property1 { get; set; }
}
然后像这样使用它们:
var database1Poco = _databases.Query(new Database1PocoByProperty1 { Property1 = 1 });
如果你喜欢,你可以将它移植到Java。
以下是其他一些例子:
https://lostechies.com/jimmybogard/2012/10/08/favor-query-objects-over-repositories/ http://www.mrdustpan.com/command-query-objects-with-dapper#disqus_thread http:/ /crosscuttingconcerns.com/CommandQuery-Object-pattern
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.