适合类似web服务实现的设计模式

本文关键字:实现 设计模式 服务 web | 更新日期: 2023-09-27 18:15:47

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

因此,为了获取正确的服务,我将客户的名称存储在表的某个位置("a"或"B"),并且我的程序必须知道每次运行都要处理哪个客户。我不想为每个客户提供不同的程序。我只希望我的程序获得客户名称,并在此基础上理解它将使用哪个模型和哪个控制器函数。

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

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

适合类似web服务实现的设计模式

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

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

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

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