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