我刚开始用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吗?
这可能是一个愚蠢的问题,但它会对我有所帮助。
答案 0 :(得分:7)
“DAO”代表数据访问对象。这是一种通过使用提供更直观访问器的类包装给定模型实体来封装模型逻辑的方法。
我不确定你提供的例子,但我愿意推测。看起来PersistanceManager是一个管理应用程序数据持久层的对象。您的Employee
对象可能通过此PersistanceManager
实例持久存储,并且您构建的Employee
对象可能是一个DAO,提供了一个用于管理该员工状态的界面,该界面比管理状态更简单直接通过PersistanceManager
。
在App Engine上,数据存储的一个重要性能限制是对协议缓冲区进行反序列化。如果向模型实体添加复杂方法,则会增加对象大小,这会在必须反序列化对象时导致性能损失。这里需要注意的是,您不希望在数据存储区实体规范上添加基本属性以外的任何内容。添加辅助方法会导致性能下降。
因此,App Engine上的一个常见模式是使用DAO将模型实体包装为可以提供此更高级别逻辑的类,而不会影响序列化性能。