2

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

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

先感谢您。

4

3 回答 3

3

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

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

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

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

于 2012-10-02T09:25:59.837 回答
2

我想看看适配器模式。这可以用来使不同的类一起工作。

于 2012-10-02T09:22:06.593 回答
1

一些技巧:

  • 为消息的新版本添加版本号。这会有很大帮助!
  • 为每个消息版本创建验证例程。这有多种用途:您可以根据声明的版本号验证消息是否确实正确,您可以计算出没有版本号的消息的版本,您可以在运行时验证输入,这将有所帮助你与测试。针对 XML 模式进行验证可能对此很有用。
  • 尽早处理消息版本- 即,一旦您的代码在收到消息后看到消息。越早解决版本问题,处理多个版本所需的代码库就越少。
  • 如果可能,将旧版本消息转换为新版本消息- 这通常很简单(可能添加几个具有默认值的字段),并且意味着您的代码库的其余部分可以假设新版本消息(并且您有验证程序来证明它,对吗??)
  • 仅作为最后的手段:为不同的消息版本编写自定义处理程序- 如果不同客户端版本之间的业务逻辑发生重大变化,这可能是必要的。
于 2012-10-02T09:45:52.887 回答