在不更新客户端的情况下更改服务器对象表示形式

本文关键字:对象 服务器 表示 更新 客户端 情况下 | 更新日期: 2023-09-27 17:56:19

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

我们已经有一段时间了的一个"很高兴拥有"功能的想法是,当对象的服务器表示发生变化时,即我们添加一个新属性,我们也不必发布前端的更新。现在这显然是不可能的 - 你改变一个对象的结构,你改变它的序列化形式,反序列化不起作用(或者充其量只捕获它用来拾取的内容,而没有新字段)。

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

欢迎:)所有建议

干杯

戴夫。

在不更新客户端的情况下更改服务器对象表示形式

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

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

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

  1. 使用更灵活的序列化格式。
  2. 不要更改现有的 DTO,而是扩展它们

通过这样做,服务器可以发送扩展的 DTO,而客户端可以反序列化基本 DTO。

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