如何在这种特殊情况下处理 OOP

如何解决如何在这种特殊情况下处理 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?