【问题标题】:Object orient programming and DAO design pattern面向对象编程和DAO设计模式
【发布时间】:2012-10-29 10:26:38
【问题描述】:

我是 Java 编程新手,我正在尝试了解实现 DAO 设计模式的正确方法。这是一个示例,我有一个 itemCatalog 类,其中包含 populateItemCatalog 和 searchitemCatalog 方法。项目目录是使用类型项目对象的数组实现的。

现在我想切换到 DAO 设计以从 ms-access 数据库访问相同的数据。我的问题是现在这些方法会变成什么,因为 DAO 正在搜索数据库。我是否修改它们以从 DAO 返回 DTO。希望我的问题很清楚。谢谢

【问题讨论】:

    标签: oop dao


    【解决方案1】:

    通常这是它的工作原理。

    您为您的对象实现了一个 DAO 接口。 在您的情况下是 CatalogDao。

    这应该具有所有必需的数据访问方法。

    现在,DAO 模式背后的理念是您可以拥有相同的多个实现。

    在您的情况下,您将拥有它的 MS-Access 实现。这应该隐藏所有数据库特定的逻辑,并且应该返回 POJO。

    DTO 通常是不同的东西。在通常的意义上,它意味着用于客户端-服务器通信的对象。例如,您的 POJO 可以转换为 xml 或 json。从客户端调用时。

    这完全不同。

    简而言之,DAO 对您的应用层隐藏了 db 实现细节,以便应用层可以直接处理 java 对象。

    public interface ItemCatalogDao{
      ItemCatalog searchItemCatalog(Long itemId)
    }
    

    一种可能的实现方式是

    public class ItemCatalogDaoMsImpl implements ItemCatalogDao{
    
      public ItemCatalogDaoMsImpl(){
        //do your initialization code here , such as getting connection etc
    }
      public ItemCatalog searchItemCatalog(Long itemId){
       //write your sql code here
    }
        }
    

    【讨论】:

    • 嗨 Sajit - 我还是有点困惑,你能帮我举一个使用我的 itemCalalog 类的例子吗?
    • 嘿,感谢您的耐心等待,非常感谢您的建议,正如我提到的,我对 java 很陌生。所以基本上你说的是我将不再有一个 itemCatalog 类,而是一个 itemCatalogDao 类(接口)对吗?
    • 不确定你的班级名称。但是是的。如果 item 是代表模型的 java bean,那么您将不会拥有 itemcatalog 而是 itemcatalogdao 接口。很抱歉与类命名混淆
    【解决方案2】:

    如你所说;现在您想从不同的数据库中获取相同的数据。这种情况 DAO 模式非常适合。

        public interface ItemCatalogDAO extends GenericDAO<DTO, String> {
       public DTO populateCatalog(String id); 
           public searchCatalog(String x);
         }
    

    现在您的实现类将必须实现上述(示例)接口。只要确保你设计的接口可以被所有实现类使用。

    所以如你所问,你能返回 DTO。是的,您应该根据您的要求返回 DTO 或 DTO 列表。从您的 DAO 返回一个对象是一种很好的做法。这样您就可以抽象您的实现,并且它也支持使用泛型。

    【讨论】:

    • 我的 itemCatalog 会不会像这样: public void populateItemcalalog()throws ClassNotFoundException, SQLException{ DAO dao = DAO.getDAO(); ArrayList itemCatalog = dao.getitemCatalog();
    • ArrayList itemCatalog = dao.getitemCatalog();是的,你应该像这样返回对象。只需确保将所有与数据库相关的逻辑保留在 DAO 类中即可。
    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2012-04-14
    • 2012-07-26
    • 2012-08-21
    相关资源
    最近更新 更多