面向对象编程和DAO设计模式

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 类中即可。

以上是关于面向对象编程和DAO设计模式的主要内容,如果未能解决你的问题,请参考以下文章

面向接口设计和编程——(面向对象面向接口面向过程面向实现) --转载

设计模式学习笔记面向对象设计原则设计模式编程范式重构的关系

面向对象和面向过程的编程方式的理解

Python之面向对象

Rust编程语言入门之Rust的面向对象编程特性

设计模式学习笔记 面向对象相比于面向过程的优势是什么?