我是java编程的新手,正在尝试理解实现DAO设计模式的正确方法。这是一个例子,我有一个itemCatalog类,包括populateItemCatalog和searchitemCatalog方法。项目目录是使用类型项对象的数组实现的。
现在我想切换到DAO设计以从ms-access数据库访问相同的数据。我的问题是,当DAO正在搜索数据库时,现在这些方法变成了什么。我是否修改它们以从DAO返回DTO。希望我的问题很明确。感谢
答案 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是一个好习惯。这样就可以抽象出你的实现,并且它也支持使用泛型。