如何解决如何在这种特殊情况下处理 OOP
我必须通过 Soap 和 Rest 服务将我的 Drupal 应用程序与第三方 API 集成。
我想尽可能地正交!但是我对我得出的结果并不满意,我在这里寻求帮助,因为我不想浪费太多时间。
这些是我抽象的 Rest and Soap 服务:
abstract class RestService {
protected $config;
protected $httpClient;
public function __construct(ConfigFactoryInterface $configFactory) {
$this->config = $configFactory->get('third_party.rest_service');
$this->httpClient = new Client(['base_uri' => $this->setBaseUri()]);
}
protected abstract function setBaseUri();
}
abstract class SoapService {
protected $client;
protected $credentials;
public function __construct(ConfigFactoryInterface $configFactory) {
$config = $configFactory->get('third_party.soap_service');
$this->client = new SoapClient($config->get('wsdl_url'));
$this->credentials = new SoapCredentials();
}
}
现在是“专业”服务:
class AuthService extends RestService {
protected function setBaseUri() {
return $this->config->get('auth_basepath');
}
public function getAccesstoken() {
$accesstoken = $this->config->get('access_token');
if (!$this->isTokenValid($accesstoken)) {
$accesstoken = $this->refreshToken();
}
return $accesstoken;
}
protected function isTokenValid($accesstoken) {...}
}
class ContactsService extends SoapService {
public function __construct(ConfigFactoryInterface $configFactory,AuthService $authService) {
parent::__construct($configFactory);
$this->credentials->password = $authService->getAccesstoken();
}
public function ... {}
}
class EventsService extends RestService {
protected $accesstoken;
public function __construct(ConfigFactoryInterface $configFactory,AuthService $authService) {
parent::__construct($configFactory);
$this->accesstoken = $authService->getAccesstoken();
}
protected function setBaseUri() {
return $this->config->get('events_basepath');
}
public function getEvents(array $filters = null) {...}
}
如您所见,AuthService 用于获取访问令牌,并在soap 和rest 认证的api 调用中使用它,但它扩展了RestService,因为EventsService 已经这样做了。
我的疑问是在 EventsService 实际上,我不知道这是否是一个好的做法,那就是对扩展“容器”(EventsService 本身)的同一类的类(AuthService)进行依赖注入.
我知道这可能是一个奇怪的用例,但是:在这种情况下你会怎么做?
预先感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。