通用Dao和服务层

时间:2011-04-28 21:34:31

标签: java dao

我将为我的应用程序设计一个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()”那么在我需要特定于业务操作的数据的情况下该怎么做呢:例如:具有角色的用户,具有产品的用户等。

5 个答案:

答案 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。

相关问题