1

我正在使用一个 SOAP Web 服务,它为每个客户创建一个单独的服务点和 WSDL。我不知道为什么要这样做。但是例如,如果他们有两个客户端 A 和 B,则服务会指定两个具有不同 WSDL 地址的不同服务地址。这些单独的 WSDL 90% 是相同的对象和相同的功能,但其中一些根据客户的类型而有所不同。因此,即使它们以完全相同的方式工作,创建的对象最终也不相同。

因此,为了获取正确的服务,我将客户的姓名存储在表中的某个位置(“A”或“B”),并且我的程序必须知道每次运行时它与哪个客户打交道。我不想为每个客户提供不同的程序。我只想让我的程序获取客户名称,并据此了解它将使用哪个模型和哪个控制器功能。

什么设计模式可以帮助我解决这个问题? 将来很有可能会有一个额外的客户,所以我希望我的代码尽可能地松耦合。

我一直想在我的代码中正确使用设计模式,所以我想是时候这样做了。我应该使用策略模式吗?您能否简要解释一下对此的最佳解决方案是什么?

4

1 回答 1

0

在您的情况下,我会使用两种设计模式。第一个是Facade 模式。使用外观模式来简化您的应用程序必须处理的 Web 服务的接口。确保您只需要在 web 服务合同更改时更改外观的实现。将服务中的对象转换为您控制下的对象,并使用适合您的域和抽象级别的名称和参数调用函数。

第二种设计模式是适配器模式。在您的情况下,您应该确定是否可以决定两个 Web 服务的通用接口。因此,如果两个服务之间 10% 的差异可以转换为您在应用程序中使用的一个接口(对象和/或函数)。

外观将使用适配器将 10% 的差异转换为常见的对象和函数。之后,facade 使用通用对象和函数,以及其他 90% 的 Web 服务,为您的应用程序提供适当的抽象层。

如果将来有其他客户,您很可能只需要添加或修改适配器。

于 2015-04-15T20:42:38.733 回答