在GAE、Java、JDO等上下文中,DAO是什么?

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吗?

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

1个回答

7
一个"DAO"代表数据访问对象。它是通过使用一个类将给定的模型实体包装起来,并提供更加直观的访问器来封装模型逻辑的一种方式。
我不确定你提供的例子,但我愿意猜测。看起来PersistanceManager是一个管理应用程序数据持久性层的对象。你的Employee对象可能是通过这个PersistanceManager实例进行持久性存储的,而你构建的Employee对象很可能是一个DAO,它提供了一个比直接通过PersistanceManager管理状态更简单的接口来管理该员工的状态。
在App Engine上,数据存储的一个重要性能限制是反序列化协议缓冲区。如果你在模型实体中添加复杂的方法,你将增加对象大小,这将导致在反序列化对象时性能下降。因此,在一个数据存储实体规范中,你不想添加除基本属性以外的任何东西。添加帮助方法会导致性能下降。
因此,在App Engine上一个常见的模式就是使用DAO来包装模型实体,以便提供这种高级逻辑,而不影响序列化性能。

很高兴你觉得有帮助!顺便说一下,我并不是很熟悉App Engine的Java平台,但我非常熟悉他们的Python平台。 - mvanveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接