我正在寻找一种设计模式来解决我遇到的架构问题。
我使用的某些web服务有点相同但不完全相同。对于每个新版本的Web服务,可能还有一些可用的方法,但大多数方法基本相同。
我想编写一个抽象层,无论我正在与哪个版本的Web服务通信,它都能正常工作。显然,如果我使用的方法只存在于较新版本的webservices中,我会得到某种错误,但这没关系。我可以处理这些。
我想要这个抽象层的原因是为了避免我的应用程序与它正在与之通信的web服务版本之间的紧密耦合。
我的抽象层设计模式有哪些选择?我看到有一种叫做Adapter的模式,另一种叫做Bridge。在这种情况下,任何人都会这样做吗?任何帮助表示赞赏!
编辑 - 为清楚起见,这是一幅图。
有时我希望我的应用程序与webservices版本1通信,有时我希望它使用webservices版本2.这取决于谁在使用客户端应用程序。
客户端应用程序不应该知道或关心它正在与哪个版本进行通信。唯一的例外是,如果它使用的方法仅在某些版本中可用,我需要优雅地处理(告诉用户他们已经安装了旧版本的web服务)。
答案 0 :(得分:2)
那将是一家工厂。你甚至可以使用内置的ChannelFactory或者你自己的。无论如何,一个事实让你可以在不改变客户合同的情况下改变实施。
答案 1 :(得分:2)
我建议使用FACADE模式。您可以通过以下链接了解有关它的更多信息。 http://javapapers.com/design-patterns/facade-design-pattern/
Facade是为客户提供抽象和无缝层进行交互。它隐藏了所有内部复杂性,因为在您的情况下,客户端需要找到它可以与之交互的正确版本的Web服务。让我们假设您有不同版本的Web服务,并且输入json / xml结构在不同版本中已更改。 Facade将接受客户端调用,它将针对不同版本的Web服务验证输入,然后调用正确的Web服务版本。如果您没有Facade层,那么客户端将不得不努力找到正确的Web服务版本,并且必须在到达正确的Web服务之前发送多个调用。