0

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

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

我正在尝试构建一个游戏,所以我将房间、怪物、玩家等作为一个班级。当玩家进行移动或攻击等动作时,我必须加载一些数据,对其进行修改并将其全部存储在一个 tx 中,这样就不会发生异常。

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

谢谢你,伊多。

4

1 回答 1

1

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

其次,我会认真考虑使用诸如 Guice 之类的依赖注入框架来获取 Objectify 对象(或 DatastoreService 对象)——它最终会使您的代码更加简洁,并为您将来提供有用的技能。

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

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

于 2012-04-06T08:57:10.630 回答