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

时间:2012-11-09 05:01:47

标签: oop dao

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

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

2 个答案:

答案 0 :(得分:1)

通常这是它的工作原理。

您为对象实现DAO接口。 在您的案例中,CatalogDao。

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

现在,DAO模式背后的想法是你可以有多个相同的实现。

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

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

这是不同的altogehter。

简而言之,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
}
    }

答案 1 :(得分:1)

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

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

现在,您的实现类必须实现上面的(示例)接口。只需确保以这样的方式设计界面,即所有实现类都可以使用它。

所以你问过,你能否回到DTO。是的,您应该根据您的要求返回DTO或DTO列表。从DAO返回一个Object是一个好习惯。这样就可以抽象出你的实现,并且它也支持使用泛型。