Получить данные из разных 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.