【问题标题】:A suitable design pattern for similar web service implementations适用于类似 Web 服务实现的设计模式
【发布时间】:2013-05-28 14:11:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# web-services oop design-patterns soap


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 2011-04-27
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多