Java GAE中的数据访问

Java GAE中的数据访问,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我正在尝试用GAE编写一个小应用程序。我使用Java和本机DatastoreService来处理数据(Objectify是一种可能性,但变化不大) 我很难弄明白如何保持面向对象的设计并以事务方式高效地使用数据存储 我试图建立一个游戏,所以我有房间,怪物,玩家等,每一个作为一个类。当玩家执行移动或攻击等动作时,我必须加载一些数据,修改并将其全部存储在一个tx中,这样就不会出现异常 我应该在调用层次结构中一直传递DatastoreService实例,还是只在每个类上获取DatastoreServic

我正在尝试用GAE编写一个小应用程序。我使用Java和本机DatastoreService来处理数据(Objectify是一种可能性,但变化不大)

我很难弄明白如何保持面向对象的设计并以事务方式高效地使用数据存储

我试图建立一个游戏,所以我有房间,怪物,玩家等,每一个作为一个类。当玩家执行移动或攻击等动作时,我必须加载一些数据,修改并将其全部存储在一个tx中,这样就不会出现异常

我应该在调用层次结构中一直传递DatastoreService实例,还是只在每个类上获取DatastoreService更好? 因为数据存储确保了启动事务后的一致性视图,并且在我确实获取时放置了一个实体,因为我仍然在tx中,所以获取null,我应该如何处理

谢谢,,
Ido.

首先,我认为您应该仔细研究Objectify,它使事务和嵌入对象(例如)变得非常容易

第二,我会认真考虑使用依赖注入框架(如Guice)来获得对象化对象(或DATASTeReService对象)——它将使您的代码最终变得更干净,同时也为将来教您一个有用的技能。

如果不使用依赖项注入,或者即使使用了依赖项注入,最好将代码放入与数据本身不同的类中来控制数据。虽然这并不总是最好的策略,但我认为通常是这样。例如,如果你发现自己想要同时更新和保存一个怪物和一个玩家,你会把代码放在哪里-在怪物中还是在玩家中?我有时发现使用一个单独的数据访问对象来做这类事情是最容易的,或者如果这只是一点点工作,就在Servlet中做


Objectify示例应用程序可能有助于解决这些问题—它使用Guice,但不是DAO本身。

您好,谢谢您的回答。我来看看示例应用程序。如果你有一个样本应用程序,它将是伟大的。当然,我的数据访问代码不在我的实体中。问题在于将其放在何处,以保持关注和性能的分离。