Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java应用程序更新期间实现向后兼容性?_Java_Design Patterns - Fatal编程技术网

如何在Java应用程序更新期间实现向后兼容性?

如何在Java应用程序更新期间实现向后兼容性?,java,design-patterns,Java,Design Patterns,我遇到了在应用程序更新期间保持向后兼容性的问题。我有一个客户机-服务器体系结构,客户机向服务器发送一些信息,并作为响应接收最新数据。在下一版本的应用程序中,添加了一些新字段和方法。若我使用旧的客户端版本,服务器上可能会出现一些错误(如空指针或不正确的工作流)。我可以检查新特性是否为空,但是当有3-4个不同版本的客户端时,我们会有意大利面代码和许多潜在的隐藏bug 是否有任何设计模式可以帮助解决此问题?如何对不同的客户端版本做出反应 提前谢谢你。我要看一下。这可用于使不同的类协同工作。尝试这种方法

我遇到了在应用程序更新期间保持向后兼容性的问题。我有一个客户机-服务器体系结构,客户机向服务器发送一些信息,并作为响应接收最新数据。在下一版本的应用程序中,添加了一些新字段和方法。若我使用旧的客户端版本,服务器上可能会出现一些错误(如空指针或不正确的工作流)。我可以检查新特性是否为空,但是当有3-4个不同版本的客户端时,我们会有意大利面代码和许多潜在的隐藏bug

是否有任何设计模式可以帮助解决此问题?如何对不同的客户端版本做出反应


提前谢谢你。

我要看一下。这可用于使不同的类协同工作。

尝试这种方法:在登录消息和每个客户端消息中添加一个版本字段

如果您没有会话,则后者有效。如果版本字段丢失,您就知道它是“版本0”

在服务器上,根据版本字段将消息分派给处理程序。许多处理程序可以拆分为一个抽象基类,该基类处理常见情况以及每个消息版本的简单扩展

这样可以避免使用意大利面代码

一些提示:

  • 将版本号添加到邮件的新版本中。这会有很大帮助
  • 为每个消息版本创建验证例程。这有多种用途:您可以验证消息在给定版本号的情况下是否正确,您可以计算出没有版本号的消息的版本,您可以在运行时验证输入,这将帮助您进行测试。针对XML模式进行验证对此很有用
  • 尽早处理消息版本——即在收到消息后代码看到消息时。越早处理版本问题,处理多个版本所需的代码库就越少
  • 如果可能,将旧版本的消息转换为新版本的消息——这通常非常简单(可能会添加几个带有默认值的字段),这意味着代码库的其余部分可以采用新版本的消息(并且您已经有验证例程来证明它,对不对??)
  • 仅作为最后手段:为不同的消息版本编写自定义处理程序-如果不同客户端版本之间的业务逻辑发生重大变化,则可能需要这样做

您使用什么样的客户机-服务器通信技术?您在谈论什么样的应用程序?Java小应用程序?通常我使用GWT作为客户端,但有一个独立的应用程序可以与服务器通信并在GWT中显示数据。+1更极端的版本是为不同的版本提供不同的端口。每个端口都有自己的代码,旧端口有旧代码和协议,新端口有新协议。您可以看到有多少客户端正在连接到旧端口,以及在不再需要它们时从何处删除它们。