1

我正在实现一个游戏/应用程序,其中玩家的帐户/状态同步到服务器。我正在考虑一个通用框架来传达对实体的嵌套对象的修改(实体是用户的帐户)。让我们假设客户端和服务器都是用 Java 编写的计算/反射的讨论(实际上客户端是在可以动态修改属性的 Actionscript 中)

Firebase为例。对根对象(Firebase 对象)的任何对象的修改都会通过可能类似于以下内容的请求传播:

Service: PersistenceService
Action: modifiedObjects
Body:
Objects [{"/full/Path/To/Object/1","newValue"},{"/full/Path/to/Object/2","newValue"}]

我对您输入的要求如下:

1) 请更正和/或扩充以下关于实现此通用框架以传播对对象树的修改的想法。

在发送方,似乎每个对象:

1)需要从根实体存储它的完整路径

2)所有嵌套对象的属性更改需要反射完成

或者

需要强制进行同步,将实体保存的上次请求的对象树与当前对象树进行比较以进行修改。

在服务器端,可以通过分析对象的路径来缓存一个请求中多次访问的对象,从而避免通过引用/搜索集合多次访问树。

4

2 回答 2

0

通常,观察者模式是对您的需求类型的回答(来自 wiki)

观察者模式(又名 Dependents,发布/订阅)是一种软件设计模式,其中称为主体的对象维护其依赖者列表(称为观察者),并自动通知它们任何状态更改,通常通过调用其中一个他们的方法。它主要用于实现分布式事件处理系统。

您需要在客户端服务器上实现,因此 wiki 上给出的示例不适用,您可能需要检查:

http://deepintojee.wordpress.com/2011/03/18/observer-pattern-applied-at-remote-level/

于 2012-04-13T12:54:19.507 回答
0

我想出的答案实际上是非常明显的,显然是最好的方法。答案是镜像一个表数据库。为每个对象分配一个 id,并将每个对象存储在 ArrayList 中(或根据类型为每个对象分配一个唯一 ID,并将对象存储在其类型的 ArrayList 中,该 ArrayList 本身存储在 HashMap 中)。

我将我的接口称为 ServiceObject 和 ServiceContainer。

现在我唯一需要看到的是 json 和 protostuff 如何序列化对对象的双重引用。它们是否被序列化为单独的对象?如果是这样,那么任何嵌套的 ServiceObject 都需要反序列化为对 ArrayList 中对象的引用。

于 2012-04-16T22:51:27.040 回答