Получить данные из разных API

Я разрабатываю API, которые получают данные из других API (Facebook, Google...). Моя идея состоит в том, чтобы создавать разные репозитории для каждого API. Например:

Interface ReaderRepositoryInterface
{
   getEvents ();
   getComents ()
}

class FacebookReaderRepository implements ReaderRepositoryInterface
{
   getEvents()
   {
     //call the api facebook method
   }

   getComments()
   {
     //call the api facebook method
   }
}

GoogleReaderRepository...

Каждый класс (FacebookReaderRepository, GoogleReaderRepository...) будет находиться в инфраструктуре и реализует методы, которые имеет ReaderRepositoryInterface. Таким образом, идея заключается в том, что сервисы приложений получают данные из определенного хранилища и создают сущность с полученной информацией.

Я хочу знать, правильно ли я применяю твердое тело?

1 ответ

То, что вы планируете сделать здесь, - это хорошее применение принципов SOLID. Будьте осторожны с тем, что будет позже:

Убедитесь, что в этих других частях вашего кода ваш код должен оставаться независимым от реализации. Например, если вы выбираете некоторые данные в контроллере:

<?php

// doing some stuff - begins

$repository = $this->getRepository();

$events = $repository->getEvents();

// doing some stuff - continues

/**
 * @return ReaderRepositoryInterface
 */
private function getRepository()
{
    $repository = new FacebookReaderRepository();

    return $repository;
}

Идея заключается в том, что при "выполнении каких-то вещей" ваш код должен знать, что ему присвоен ReaderRepositoryInterface и он использует только ту функцию, которая идет с ним. Он должен не знать, что $repository фактически это FacebookReaderRepository. Это твердое вещество применяется. Преимущества этого подхода состоят в том, что вы можете легко заменить FacebookReaderRepository на TwitterReaderRepository без изменения кода "делать что-то". Изменяйте только содержимое вашего getRepository() метод.

Вы также можете быть осторожны с "принципом сегрегации интерфейса": если ваш FacebookReaderRepository становится слишком большим, возможно, вы захотите создать FacebookApiClient, который обрабатывает только HTTP-вызовы, который используется FacebookReader, выполняя некоторую обработку извлеченных данных, и этот будет реализовывать ReaderRepositoryInterface.

Другие вопросы по тегам