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

时间:2012-10-02 09:20:12

标签: java design-patterns

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

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

提前谢谢你。

3 个答案:

答案 0 :(得分:3)

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

如果您没有会话,后者会起作用。如果缺少版本字段,则表示它是“版本0”。

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

这可以避免意大利面条代码。

答案 1 :(得分:2)

我会看一下Adapter pattern。这可以用来让不同的班级一起工作。

答案 2 :(得分:1)

一些提示:

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