@ObehanProger

Для чего бывает нужно подменять реализацию интерфейса?

Изучая тему интерфейсов и внедрения зависимостей, понял как все это делается и что это нужно чтобы можно было легко подменить реализацию интерфейса, но остался неясным момент, для чего нужно менять релизации интерфейсов? Приведите примеры желательно в laravel
  • Вопрос задан
  • 271 просмотр
Пригласить эксперта
Ответы на вопрос 3
@Wentixon
Все очень просто! Приведу пример на laravel, но фреймворк разумеется не имеет к этому никакого отношения.

Например, в ларавеле есть пакет кэширования. Вот его интерфейс. Но разумеется, реализация кэширования может быть абсолютно разная, ты ее можешь настроить с помощью конфигурации. В одном проекте, ты можешь использовать какой нибудь redis, в другом memcached к примеру, а в тестах и вовсе массив. В каждом современном фреймворке есть сервис контейнер, который может отдать тебе нужную реализацию по запросу нужного интерфейса (привязывается реализация к интерфейсу в сервис провайдерах).

А теперь представь, что ты делаешь сервис (класс) и ему нужно что то закэшировать. И сделаешь это вот так

class RemoteApi {
    public function _construct(RedisCache $cache)
    ....
}


Я думаю сам видишь, в чем тут проблема. Этот класс будет работать только с редисом. А теперь представь, что таких классов очень много, которые использую кэш редиса. Потом при смене хранилища кэша придется все их менять и переделывать, так как интерфейсы у них, возможно, будут разные.
Ответ написан
@php666
внедрения зависимостей, понял как все это делается и что это нужно чтобы можно было легко подменить реализацию интерфейса, но остался неясным момент, для чего нужно менять релизации интерфейсов
слова выделены жирным. не менять, а подменить одну реализацию другой - это как поставить запчасть А вместо запчасти Б на условно одинаковое резьбовое соединение. а не заниматься напилингом. так яснее?

Приведите примеры
https://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D... - подмена в примере объекта конфигурации базы данных, как пример. можешь инстанцировать кучу объектов для работы с БД, но с разными подключениями к разным БД.
Ответ написан
Compolomus
@Compolomus
Комполом-быдлокодер
Пример в той же ларавел, посмотрите как подменяются интерфейсы при работе с разными базами данных
Пример не из ларавель
Есть например кэшер, у него может быть разное хранилище
Вот список реализаций одного интерфейса
https://github.com/topics/psr-16
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы