在GAE,Java,JDO等环境中DAO是什么?

tob*_*bik 4 google-app-engine dao jdo

我刚刚开始用Java编写GAE Web应用程序,所以我对这些东西都是新手.我使用JDO来存储数据.我正在阅读很多在线资料(论坛,教程......),我到处都看到DAO,但我真的不明白它是什么.是的,数据访问对象,技术......但是当有人命名变量时userDAO,变量将包含什么?

让我们考虑以下代码(来自GAE文档):

PersistenceManager pm = PMF.get().getPersistenceManager();

Employee e = new Employee("Alfred", "Smith", new Date());

try {
    pm.makePersistent(e);
} finally {
    pm.close();
} 
Run Code Online (Sandbox Code Playgroud)

它真的很简单,对我来说很有意义......但是在这个例子中你会称之为DAO吗?

这可能是一个愚蠢的问题,但它会帮助我很多.

mva*_*een 7

"DAO"代表数据访问对象.这是一种通过使用提供更直观访问器的类包装给定模型实体来封装模型逻辑的方法.

我不确定你提供的例子,但我愿意推测.看起来PersistanceManager是一个管理应用程序数据持久层的对象.您的Employee对象可能通过此PersistanceManager实例持久存储,并且Employee您构建的对象可能是一个DAO,它提供了一个用于管理该员工状态的接口,该接口比PersistanceManager直接管理状态更简单.

在App Engine上,数据存储的一个重要性能限制是对协议缓冲区进行反序列化.如果向模型实体添加复杂方法,则会增加对象大小,这会在必须反序列化对象时导致性能损失.这里要说的是,您不希望在数据存储区实体规范中添加任何基本属性以外的内容.添加辅助方法会导致性能下降.

因此,App Engine上的一个常见模式是使用DAO将模型实体包装为可以提供此更高级别逻辑的类,而不会影响序列化性能.