Есть проект на Laravel который обращается к
нескольким внутренним REST API.
Сейчас это реализовано так:
Есть абстрактный класс, в котором есть метод
protected function send(string $verb, string $endpoint, array $params = []): Response
{
return $this->http->$verb($endpoint, $params);
}
и 2 класса, которые его расширяют кучей разных методов (каждый своими), которые вызывают внутри себя $this->send(...) с нужными параметрами. Количество этих методов постоянно увеличивается т.к. API дополняются. В контроллерах тот или иной класс API мы внедряем не через абстракцию, а указав конкретную реализацию. Да и не может у них быть общего интерфейса по определению, это ведь разные API. Получается, абстрактный класс используется только для шеринга метода send(), а методы классов для вызова его с нужными параметрами.
Прочитал
https://habr.com/ru/post/313796/ , но не могу понять как реализовать существующий функционал с учётом принципов из статьи. Если не сложно, объясните, пожалуйста.
Я могу представить если нам нужно заменить, например, хранилище. Меняем MySql базу на файл, все методы остаются теми же (т.е. интерфейс единый), но меняются реализация. А тут? Может я хочу применить принцип не для той задачи?
UPD: я тут подумал. Замена реализации мне не нужна, получается. Я точно знаю в каких местах в коде обратиться к одному API а где к другому. И там нужна именно необходимая в том месте реализация, без возможности её подменять. Но этот факт не делает код лучше.