Web services 为连接到第三方的服务选择正确的设计模式

Web services 为连接到第三方的服务选择正确的设计模式,web-services,symfony,design-patterns,soap,Web Services,Symfony,Design Patterns,Soap,我想知道是否有人可以帮忙,所以我需要确定正确的设计模式使用,我希望有人能给我指出正确的方向 因此,基本上我使用的是symfony2,我使用一个bundle来处理对第三方api的soap请求,以便对用户进行身份检查,但我需要构建服务,为soap请求构建xml,并向包含身份检查集合的用户实体添加一些额外的内容 我被困在如何正确构建服务上,如何使服务不受第三方的影响?我是否创建了一个服务接口,然后可以使用它生成第三方特定的服务?然后我是否构建了一个映射到第三方结果的实体,但这是否应该是我为特定第三方扩

我想知道是否有人可以帮忙,所以我需要确定正确的设计模式使用,我希望有人能给我指出正确的方向

因此,基本上我使用的是symfony2,我使用一个bundle来处理对第三方api的soap请求,以便对用户进行身份检查,但我需要构建服务,为soap请求构建xml,并向包含身份检查集合的用户实体添加一些额外的内容

我被困在如何正确构建服务上,如何使服务不受第三方的影响?我是否创建了一个服务接口,然后可以使用它生成第三方特定的服务?然后我是否构建了一个映射到第三方结果的实体,但这是否应该是我为特定第三方扩展的接口

这肯定有一个设计模式,但我甚至不知道谷歌或寻找什么

提前谢谢

添加


我在想也许我可以使用桥接模式,但同样不是100%确定

我建议您实现一个工厂方法,让Symfony为您实例化正确的类(如所述)。 像这个例子:

假设您有一个可以定义为接口的简单(外部)服务:

<?php

namespace Acme\DemoBundle\Service\Integration;


interface ExternalServiceInterface  {

    public function call($object)
}
实际上,您在参数中定义了您想要的策略,如“SOAP”或模拟响应,而在控制器/服务中定义了您想要的策略,如:

$response = $this->get('external_service_manager')->call($obj);

希望能有所帮助。

回答得非常好,谢谢你提供的详细信息,我会看一看谢谢@Oliver,我希望能集中你的问题,或者启发你找到解决问题的正确方法。这只是一种解决问题的方法。我在等待更多关于你问题的其他意见和答案!
services:

# The real Soap Services
  acme.integration.soap:
        class: Acme\DemoBundle\Service\Integration\ExternalServiceSoapCaller
        arguments: [%acme.soap_base_url%, %acme.api_key%, @logger]

# Mocked service: response with fixed value (true). For tests pourpose
  acme.integration.es_a_true:
        class: Acme\DemoBundle\Service\Tests\ExternalServiceMock
        arguments: [true]

# Mocked service: response with fixed value (true). For tests pourpose
  acme.integration.es_false:
        class: Acme\DemoBundle\Service\Tests\ExternalServiceMock
        arguments: [false]


  sd_factory:
        class:            Acme\DemoBundle\Service\Integration\ESServiceFactory
        arguments:
          -service_available:
            'SOAP': @acme.integration.soap
            'MOCK_ALWAYS_TRUE': @acme.integration.es_a_true
            'MOCK_ALWAYS_FALSE': @acme.integration.es_a_false


  external_service_manager:
        class:            "Acme\DemoBundle\Service\Integration\ExternalServiceInterface"
        factory_service:  sd_factory
        factory_method:   get
        arguments: [%params_defined_in_parametes_yml%]
$response = $this->get('external_service_manager')->call($obj);