4

我刚刚开始用 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();
} 

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

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

4

1 回答 1

7

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

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

在 App Engine 上,数据存储区的一大性能限制是反序列化协议缓冲区。如果向模型实体添加复杂的方法,则会增加对象大小,这会在必须反序列化对象时导致性能下降。这里的要点是,除了基本属性之外,您不想将任何其他内容添加到数据存储实体规范中。添加辅助方法将导致性能下降。

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

于 2012-06-19T19:32:09.460 回答