我们有一个分布式系统,其中基于Java的服务器缓存与C#前端通信,目前通过对象序列化。
我们一直在努力的一个“很棒的”功能是,当一个对象的服务器表示发生变化时,即我们添加一个新属性时,我们不应该发布一个更新前端也是如此。现在这显然不是一种可能性 - 你改变了一个对象的结构,改变了它的序列化形式,并且反序列化不起作用(或者最多只捕获它用于拾取的内容而没有新的字段)。
我想知道是否有人之前遇到过类似的问题,他们解决了什么样的解决方案?办公室中的一个亮点就是建议我们将XML发送给客户端,它应该直接根据该消息中包含的内容构建UI - 两者之间没有构建对象 - 但这当然会带来问题。
欢迎所有建议:)
干杯,
戴夫。
答案 0 :(得分:2)
您可以将“额外字段”Map<String, Object>
定义为您计划更新的对象中的一个字段
然而,您仍然需要告诉客户端使用它(但即使它们不使用它仍然会被捕获)并且当客户端无法反序列化时,字段的新类型可能会破坏前端它
答案 1 :(得分:2)
我可能会看看谷歌协议缓冲区。该协议支持客户端和服务器端的不同协议版本。
答案 2 :(得分:1)
通过这样做,服务器可以发送扩展的DTO,而客户端反序列化基本DTO。
许多序列化框架都有标记为可选的字段,您可以使用它标记所有新字段。