适用于类似Web服务实现的合适设计模式

时间:2013-05-28 14:11:49

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

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

因此,为了获取正确的服务,我将客户的名称存储在某个表格(“A”或“B”)上,我的程序必须知道每个运行时它处理哪个客户。我不想为每个客户提供不同的程序。我只是希望我的程序获取客户名称,并根据它了解它将使用哪种型号和控制器功能。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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