Web services 使用不同版本的Web服务的设计模式?

Web services 使用不同版本的Web服务的设计模式?,web-services,design-patterns,Web Services,Design Patterns,我正在寻找一种设计模式来解决我遇到的架构问题 我使用了一些有点相同但不完全相同的Web服务。对于每个新版本的webservices,可能会有更多的方法可用,但在大多数情况下,它们基本上是相同的 我想编写一个abstractionlayer,它可以在与哪个版本的Web服务通信时正常工作。显然,如果我使用的方法只存在于较新版本的webservices中,我会得到某种错误,但这没关系。我能处理这些 我想要这个抽象层的原因是为了避免我的应用程序和它所通信的Web服务版本之间的紧密耦合 在为抽象层设计模式

我正在寻找一种设计模式来解决我遇到的架构问题

我使用了一些有点相同但不完全相同的Web服务。对于每个新版本的webservices,可能会有更多的方法可用,但在大多数情况下,它们基本上是相同的

我想编写一个abstractionlayer,它可以在与哪个版本的Web服务通信时正常工作。显然,如果我使用的方法只存在于较新版本的webservices中,我会得到某种错误,但这没关系。我能处理这些

我想要这个抽象层的原因是为了避免我的应用程序和它所通信的Web服务版本之间的紧密耦合

在为抽象层设计模式时,我有哪些选择?我看到有一种模式叫做适配器,另一种模式叫做桥接。在这种情况下,他们中有人会这样做吗?感谢您的帮助

编辑-为了清晰起见,这里有一张图。

有时我希望我的应用程序与WebServicesVersion1对话,有时我希望它使用WebServicesVersion2。这取决于谁在使用客户端应用程序


客户端应用程序不应该真正知道或关心它正在与哪个版本通信。唯一的例外是,如果它使用的方法仅在某些版本中可用,我需要优雅地处理它(告诉用户他们安装了旧版本的Web服务)。

这将是一个工厂。你甚至可以使用一个内置的通道工厂,或者自己设计一个。无论如何,factory允许您在不更改客户合同的情况下更改实现。

我建议使用FACADE模式。您可以通过以下链接了解更多信息。


Facade是为客户机交互提供抽象和无缝层。它隐藏了所有内部复杂性,因为在您的案例中,客户机需要找到它可以交互的web服务的正确版本。假设您有不同版本的Web服务,并且输入json/xml结构在不同版本中发生了更改。Facade将接受客户端调用,它将根据不同版本的web服务验证输入,然后调用正确的web服务版本。如果您没有facade层,那么客户端将不得不努力找到正确的web服务版本,并且在到达正确的web服务之前,它将不得不发送多个调用。

在我看来,facade设计模式是为了在单个类之后隐藏复杂类。我不知道如何将其应用到我的案例中。更新了解决方案,详细说明了facade如何在这里帮助您。好的,我看到对于客户端应用程序使用的代码部分,我可以使用facade模式。但是在facade后面,我假设我需要使用另一种模式,该模式负责创建到正确版本的Web服务的连接。这也许是一种工厂模式?客户端必须能够基于输入参数(客户ID)使用所有不同的版本(不仅仅是最新版本),因此我认为工厂模式将帮助我建立与正确Web服务的连接。是的,您可以在外观后面使用工厂或命令模式。