【问题标题】:Generic Dao and service Layer通用道和服务层
【发布时间】:2011-04-28 21:34:30
【问题描述】:

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

【问题讨论】:

  • 复制粘贴错误! Stirng.

标签: java dao


【解决方案1】:

【讨论】:

  • 该链接中的实现与休眠完全相关(查看导入语句)。那里有更好的解决方案。例如:codeblock.engio.net/?p=180
【解决方案2】:

嘿,检查这个网站DAO Implementation。有一些具有不同设计模式的 DAO 实现。我认为带有抽象工厂的 DAO 会适合你。

【讨论】:

  • 是的,但在这种情况下的问题是目前我有一个 dao 及其 impl 但将来我可以拥有 30 个 dao 及其 30 个 impl ...我需要最小化或终止这种重复也需要将 Service 与 DAO 及其底层实现解耦。
  • 看看codeblock.engio.net/?p=180。我提出了一个解决方案,它使用不同存储技术的技术无关实现作为特定领域 DAO 的底层机制。
【解决方案3】:

我应该怎么做才能摆脱“getByQuery(query)”的具体实现,因为数据存储可以是 RDBMS、文件系统、FTP 等。

您不需要,您只需要提供“通用”查询,例如“name = a”可以在数据库中执行查询,或者查找名为“a”的文件或几乎其他任何内容。

【讨论】:

  • 先生,您不认为这会导致我将为每个底层实现开发一种小型查询语言:)
【解决方案4】:

您打算在“查询”参数中传递什么信息? SQL ?我会将 String 参数替换为特定于业务的参数,可能是一个带有“name”、“surname”等字段的小类。底层实现会将其转换为 SQL、远程服务调用或其他特定于实现的魔法.

【讨论】:

  • 感谢您的回答。您的回答导致了一种小型查询语言,因此我可以根据底层实现对其进行解释。但我不想发明这种查询语言。我认为有一个选项,道纹,我应该意识到。感谢您的回复
【解决方案5】:

对于特定的 impl,只需抛出“UnsupportedOperationException”。可以在这里找到良好的通用 dao 实现 http://code.google.com/p/hibernate-generic-dao/ - 我还可以调整源代码以使用 hibernate 4 和 spring 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2014-02-13
    • 2011-09-29
    • 1970-01-01
    • 2013-02-02
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多