5

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

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

我想编写一个抽象层,无论我与哪个版本的 web 服务通信,它都可以工作。显然,如果我使用的方法只存在于较新版本的 web 服务中,我会得到某种错误,但没关系。我可以处理这些。

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

当涉及到我的抽象层的设计模式时,我有哪些选择?我看到有一种模式称为适配器,另一种称为桥接。在这种情况下,他们中的任何一个人会这样做吗?任何帮助表示赞赏!

编辑 - 为了清楚起见,这里是一张图纸。 在此处输入图像描述

有时我希望我的应用程序与 web 服务版本 1 通信,而其他时候我希望它使用 web 服务版本 2。这取决于谁在使用客户端应用程序。

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

4

2 回答 2

2

那将是一个工厂。您甚至可以使用内置的 ChannelFactory 或自己创建。无论如何,工厂可以让您在不更改客户合同的情况下更改实施。

于 2013-05-04T16:39:45.130 回答
2

我会建议使用 FACADE 模式。您可以通过以下链接了解更多信息。 http://javapapers.com/design-patterns/facade-design-pattern/

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

于 2013-05-04T19:41:32.697 回答