Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 适用于类似web服务实现的设计模式_C#_Web Services_Oop_Design Patterns_Soap - Fatal编程技术网

C# 适用于类似web服务实现的设计模式

C# 适用于类似web服务实现的设计模式,c#,web-services,oop,design-patterns,soap,C#,Web Services,Oop,Design Patterns,Soap,我正在使用一个soapweb服务,它为每个客户创建一个单独的服务点和WSDL。我不知道他们为什么这么做。但是,例如,如果它们有两个客户机A和B,则服务使用不同的WSDL地址指定两个不同的服务地址。这些单独的WSDL 90%都是相同的对象和相同的功能,但根据客户的类型,其中一些是不同的。因此,即使创建的对象以完全相同的方式工作,它们最终也不相同 因此,为了获得正确的服务,我将客户的姓名存储在表中的某个位置(“a”或“B”),我的程序必须知道每次运行都处理哪个客户。我不希望每个客户都有不同的计划。我

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

因此,为了获得正确的服务,我将客户的姓名存储在表中的某个位置(“a”或“B”),我的程序必须知道每次运行都处理哪个客户。我不希望每个客户都有不同的计划。我只想让我的程序得到客户的名字,并基于此了解它将使用哪种型号和哪种控制器功能

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


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

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

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

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

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