我正在实施一个游戏/应用程序,其中玩家的帐户/状态被同步到服务器。我正在考虑一个通用框架来传达实体的嵌套对象的修改(该实体是用户的帐户)。让我们假设讨论计算/反射,客户端和服务器都是用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)所有嵌套对象的属性更改都需要反思性地完成
OR
需要强制同步,将实体的保存对象树从上一个请求与当前对象树进行比较以进行修改。
在服务器端,可以分析对象的路径以缓存在一个请求中多次访问的对象,以便不多次通过引用/搜索集合访问树。
答案 0 :(得分:0)
一般来说,观察者模式是对你的要求(来自维基)的回答
观察者模式(也称为Dependents,发布/订阅)是一种软件设计模式,其中一个称为主体的对象维护其依赖者列表,称为观察者,并自动通知他们任何状态变化,通常是调用他们的方法之一。它主要用于实现分布式事件处理系统。
您需要在客户端服务器上实现,因此在wiki上给出的示例不适用您可能需要检查:
http://deepintojee.wordpress.com/2011/03/18/observer-pattern-applied-at-remote-level/
答案 1 :(得分:0)
我提出的答案实际上非常明显,显然是最好的方法。答案是镜像表的数据库。为每个对象分配一个id,并将每个对象存储在ArrayList中(或者根据类型为每个对象分配一个唯一的ID,并将该对象存储在其类型的ArrayList中,该ArrayList本身存储在HashMap中)。
我调用我的接口ServiceObject和ServiceContainer。
现在我唯一能看到的就是json和protostuff如何序列化对象的双重引用。它们被序列化为单独的对象吗?如果是这样,那么任何嵌套的ServiceObject都需要反序列化为ArrayList中对象的引用。