更改服务器对象表示而不更新客户端

时间:2011-05-12 10:56:20

标签: c# java architecture client-server

我们有一个分布式系统,其中基于Java的服务器缓存与C#前端通信,目前通过对象序列化。

我们一直在努力的一个“很棒的”功能是,当一个对象的服务器表示发生变化时,即我们添加一个新属性时,我们不应该发布一个更新前端也是如此。现在这显然不是一种可能性 - 你改变了一个对象的结构,改变了它的序列化形式,并且反序列化不起作用(或者最多只捕获它用于拾取的内容而没有新的字段)。

我想知道是否有人之前遇到过类似的问题,他们解决了什么样的解决方案?办公室中的一个亮点就是建议我们将XML发送给客户端,它应该直接根据该消息中包含的内容构建UI - 两者之间没有构建对象 - 但这当然会带来问题。

欢迎所有建议:)

干杯,

戴夫。

3 个答案:

答案 0 :(得分:2)

您可以将“额外字段”Map<String, Object>定义为您计划更新的对象中的一个字段

然而,您仍然需要告诉客户端使用它(但即使它们不使用它仍然会被捕获)并且当客户端无法反序列化时,字段的新类型可能会破坏前端它

答案 1 :(得分:2)

我可能会看看谷歌协议缓冲区。该协议支持客户端和服务器端的不同协议版本。

答案 2 :(得分:1)

  1. 使用更灵活的序列化格式。
  2. 不要更改现有的DTO,扩展它们
  3. 通过这样做,服务器可以发送扩展的DTO,而客户端反序列化基本DTO。

    许多序列化框架都有标记为可选的字段,您可以使用它标记所有新字段。