我将为我的应用程序设计一个DAO层。我的重点是服务只调用DAO,它独立于底层实现。
public interface GenericSearchDao{
List getAll();
List getByQuery(String query);
}
public class UserJdbcSearch implements GenericSearchDao{
public List getAll(){
// Get all users;
}
List getByQuery(String query){
// Get users by query;
}
}
public class UserFileSystemSearch implements GenericSearchDao{
public List getAll(){
// Get all users from file system;
}
List getByQuery(String query){
// Get users by query[this leads to invalid operation];
}
}
public userService {
private GenericSearchDao dao = new UserFileSystemSearch();
public List getUsers(){
rturn dao.getAll();
}
public List getByQuery(String query){
return dao.getByQuery(query);
}
}
需要帮助:
我应该怎样做才能摆脱'getByQuery(query)'特定的实现,因为数据存储可以是RDBMS,文件系统,FTP等。
我应该如何设计我的Dao图层?
如果任何人说“从GenericSearchDao中删除getByQuery()”那么在我需要特定于业务操作的数据的情况下该怎么做呢:例如:具有角色的用户,具有产品的用户等。
答案 0 :(得分:1)
答案 1 :(得分:0)
嘿,请查看此网站DAO Implementation。有一些DAO实现具有不同的设计模式。我认为DAO与Abstact工厂适合你。
答案 2 :(得分:0)
我应该做些什么来摆脱'getByQuery(查询)'特定的实现,因为数据存储可以是RDBMS,文件系统,FTP等。
你没有,你只需要提供“通用”查询,例如“name = a”可以在数据库中执行查询,或查找名为“a”的文件或几乎任何其他文件。
答案 3 :(得分:0)
您打算在“查询”参数中传递哪些信息? SQL?我将String参数替换为特定于业务的东西,可能是一个小类,如“name”,“surname”等字段。底层实现将把它转换为SQL,或远程服务调用,或其他特定于实现的魔法
答案 4 :(得分:0)
对于特定的impl,只抛出“UnsupportedOperationException”。好的Generic dao实现可以在这里找到http://code.google.com/p/hibernate-generic-dao/ - 我也可以调整源代码以使用hibernate 4&春天3。