为什么选择Objectify而不是JDO?

12

我将进入Gwt+Gae领域。

我的首要需求是通过Gwt-Rpc wire发送我的实体类,而不需要将它们复制到DTO中。

Objectify承诺可以很好地完成这项任务。 它声称它将隐藏所有“Jdo的复杂性”。

我从未使用过Jpa或Jdo技术。 那么所有的复杂性都在哪里呢?

我的意思是,您能否为我提供一些简单的示例,说明Objectify如何轻松处理JDO中的复杂任务?

也许是关系?


1
也许如果有一个示例项目(比如宠物店)可以深入研究一下,会有所帮助;但是,我真的没有看到 objectify 文档中任何让我认为在 JDO 中更容易的东西。我确实理解对此的需求。当我开始在应用引擎上工作时,我立即希望 SQL 可用,这样我就可以使用像 Hibernate 或 MyBatis 这样的 ORM。 - Dave
2个回答

9
我认为JDO/JPA在“Hello World”级别上很容易使用。但是,一旦你需要更加真实的东西,例如复合键、实体之间的多重关系等,情况就会发生变化。对于初学者来说,JDO GAE实现相当复杂,很难理解,部分原因是由于不支持的功能、解决方法和扩展。JDO被设计为可以在“任何地方”工作,这意味着它高度抽象化并且非常一般化。这对于可移植性来说很棒,但也意味着它可能不是与GAE这样具有相当独特数据存储的特定引擎完美匹配的选择。Datanucleus/JDO/JPA的jar包相当大(总共约2.3 MB),而Objectify的jar包则相对较小。JDO/JPA可能会在启动时执行类路径扫描以查找和注册你的实体,这可能会增加加载时间。所花费的时间将与项目中的类数成比例。
例如,我认为在代码量方面,JDO/JPA示例看起来比Objectify的许多DAO类更简单,但总的来说,维护Objectify代码对于工程师来说将更容易,因为你不需要穿过地雷区想着在JDO中可能会出现什么问题 :)

你能告诉我更多关于“复合键”和多重关系的内容吗?你具体是什么意思?你能快速写一个例子吗?此外,你的项目中每个实体都有一个objectify DAO吗?在你看来,我该如何利用D.Chandler的通用DAO?http://turbomanage.wordpress.com/2010/02/09/generic-dao-for-objectify-2/ - Fabio B.

1

JDO 的复杂性之一在于看到一个实体可能处于多少不同的状态。例如,如果想了解这会让人感到不知所措,请滚动到this page的底部并查看该状态图。Objectify 不需要这样的状态图。

JDO 的另一个棘手之处是所有在幕后发生的“魔法”,有时会使调试变得困难。当然,这实际上并不是魔法,只是字节码重写,但这本身就足够棘手了。

最后,JDO 是一个通用 API。它被设计用于对象存储、SQL 数据库和其他任何可能的东西。某个特定 JDO 概念与实际在数据存储中发生的事情之间的联系有时很难看到。Objectify 的 API 与数据存储紧密对齐,使理解正在发生的事情更容易。


2
那么,在Objectify世界中,实体状态是什么? - Fabio B.

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