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