Задать вопрос
@galithr

Правильна ли такая структура компонента?

Есть АПИ, каждый запрос к нему (помимо ссылки на само АПИ) состоит из:
- название контроллера к которому нужно обратиться
- название метода который необходимо вызвать
- параметры (в некоторых методах есть обязательные параметры, в некоторых - их нет)

Собственно нужно реализовать компонент позволяющий формировать эти запросы, отравлять их и получать ответ. Я решил разделить этот компонент на три класса:

Класс запроса - позволяет пользователю "конструировать" тело запроса
сlass Query implements QueryInterface {
  // объект клиента
  protected $client;
  
  // конструктор сохраняющий указатель на клиент
  public function __construct(ClientInterface $client);
  
  // возвращает название контроллера к которому необходимо обратиться
  public function getController();   
  
  // возвращает название метода который нужно вызвать
  public function getMethod();    
  
  // возвращает массив параметров запроса
  public function getParams();    
  
  // выполняет запрос
  public function execute() {
     $this->client->execute($this);
  }        
  
  // устанавливает значение параметра
  public function setId($value);
}


Базовый класс клиента - отвечающий за формирование и отправку http-запроса
сlass BaseClient implements ClientInterface {

  // формирует базовый http-запрос
  public function prepareRequest();
  
  // добавляет в базовый http-запрос параметры с класса Query, 
  //отправляет запрос на сервер и возвращает результат
  public function send(QueryInterface $query);
}


Непосредственно класс клиента содержащий инструменты для вызова всех запросов
class Client extends BaseClient {

  // создает объект запроса
  public function findById($id){
    return new Query($this);
  }
}


Его можно использовать так:
$client = new Client();
$client->findById(1)->execute();


Но напрягают следующие моменты:
1. Получается взаимозависимость между классами Client и Query. Или в этом нет ничего страшного?
2. Запросов будет много - пару сотен, соответственно класс Client будет содержать в себе много методов. Не будет ли класс из за этого сильно раздутым?
3. Вообще такая структура компонента - нормальная практика?
  • Вопрос задан
  • 319 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы