在 GAE、Java、JDO 等环境中,DAO 是啥?
Posted
技术标签:
【中文标题】在 GAE、Java、JDO 等环境中,DAO 是啥?【英文标题】:What is DAO in context of GAE, Java, JDO etc?在 GAE、Java、JDO 等环境中,DAO 是什么? 【发布时间】:2012-06-21 21:39:50 【问题描述】:我刚开始用 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】:“DAO”代表数据访问对象。这是一种封装模型逻辑的方法,通过使用提供更直观访问器的类包装给定模型实体。
我不确定您提供的示例,但我愿意推测。看起来 PersistanceManager 是一个管理应用程序数据持久层的对象。您的Employee
对象可能通过此PersistanceManager
实例永久存储,而您构建的Employee
对象可能是一个DAO,它提供了一个接口来管理该员工的状态,这比直接通过PersistanceManager
管理状态更简单.
在 App Engine 上,数据存储区的一大性能限制是反序列化协议缓冲区。如果向模型实体添加复杂的方法,则会增加对象大小,这会在必须反序列化对象时导致性能下降。这里的要点是,您不想在数据存储实体规范中添加除基本属性之外的任何内容。添加辅助方法会导致性能下降。
因此,App Engine 上的一种常见模式是使用 DAO 将模型实体包装在一个类中,该类可以提供这种更高级别的逻辑而不会影响序列化性能。
【讨论】:
很高兴您发现它有帮助! FWIW,我对 App Engine 的 Java 产品不是很熟悉,但对他们的 Python 平台非常熟悉。以上是关于在 GAE、Java、JDO 等环境中,DAO 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
GWT+UIBinder+Gin+Guice+JDO+GAE 示例
提交的 JDO 写入不适用于本地 GAE HRD,或可能重用的事务