【问题标题】:Patterns for propagating changes to nested objects将更改传播到嵌套对象的模式
【发布时间】:2012-04-25 13:39:15
【问题描述】:

我正在实现一个游戏/应用程序,其中玩家的帐户/状态同步到服务器。我正在考虑一个通用框架来传达对实体的嵌套对象的修改(实体是用户的帐户)。让我们假设客户端和服务器都是用 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) 所有嵌套对象的属性更改都需要反射完成

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

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

【问题讨论】:

    标签: java actionscript


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 不相关。这是一种如何以及何时通信数据的模式,而不是上面讨论的通信嵌套对象数据的格式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2020-11-19
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      相关资源
      最近更新 更多