Найти в Дзене

Внедрение зависимостей: что это такое и как работает

Сегодня хотим поделиться с вами находкой - видео от Anthony Ferrara, автора канала о программировании, PHP и Computer Science "Programming with Anthony".

Речь пойдёт о внедрении зависимостей, и автор подробно разбирает, что это такое и как работает. Специально для вас мы подготовили перевод (ручной, а не автотранслейт) и хотели даже добавить в формате субтитров, но, к сожалению, у автора канала закрыта эта возможность.

Перевод:

Что такое внедрение зависимостей? Чтобы ответить на этот вопрос, разберёмся с понятием зависимости. Зависимость — это объект, который необходим, чтобы созданный вами класс работал.
Представьте, что создали объектную модель, которая получает данные из объекта в базе данных. Можно сказать, что у объектной модели есть зависимость от объекта в базе данных.
Мы определили, что такое зависимость. Теперь разберёмся, что значит внедрение зависимости. Термином «внедрение зависимости» обозначают добавление внешней зависимости в класс. Это значит, что вам не нужно подтверждать зависимости при использовании нового оператора внутри класса.
Вместо этого укажите её в параметрах конструктора или с помощью сеттера. Это всё, что необходимо для внедрения зависимости. Вам не понадобится сложный контейнер, новый класс или объект. Конечно, новый контейнер или объект могут показаться более простым способом решения задачи. Но они вам не нужны.
Почему внедрение зависимости стоит рассматривать в первую очередь? Представьте, что программируете робота-строителя. У вас есть уложенные штабелями доски. Вы программируете робота, чтобы он делал из досок стены.
Что вы сделаете, если нужно установить в дверной проём дверь? Вы запрограммируете робота, чтобы он каждый раз делал из досок дверь? Или вы возьмёте готовую дверь у производителя дверей и научите робота устанавливать её в дверной проём?
Наиболее гибкий подход — взять готовое изделие у производителя дверей. Именно это делает внедрение зависимости. Этот инструмент отделяет процесс создания классов от создания зависимостей. Почему это важно? На этот вопрос отвечает принцип инверсии зависимостей.
Принцип инверсии зависимостей определяет, что код должен зависеть от абстракций. Зависимость от абстракций отделяет имплементации модулей друг от друга. В PHP это значит, что код должен зависеть от интерфейсов. Это позволяет заменять зависимости, если интерфейс позволяет делать это.
Внедрение зависимостей отделяет код от модулей нижнего уровня. Это делает код чистым, расширяемым и подходящим для повторного использования.
Мы разобрались с внедрением зависимости, но есть ещё одна проблема. Каждому классу для работы нужны все использованные в коде зависимости. Чтобы спроектировать каждый класс, нам нужно определить, какие зависимости он использует. Также нужно определить, как подтвердить зависимости.
К счастью, решение есть. Это контейнер внедрения зависимостей. По сути, контейнер представляет собой карту зависимостей, которые использует класс, с логикой создания зависимостей, если они ещё не созданы.
Каждый раз, когда вы запрашиваете зависимость, контейнер определяет, какую зависимость использовать. Затем он проверяет, создана ли эта зависимость. Если это так, будет использована существующая зависимость. Если нет, контейнер создаст зависимость, сохранит и вернёт её.
То есть вместо создания всех классов собственноручно вы делегируете это контейнеру. Контейнер внедрения зависимостей создаёт объект и возвращает его. Важно, что контейнер обрабатывает сложные зависимости прозрачно. Если вы хотите поменять общую зависимость, вам нужно просто обновить контейнер.
Итак, чтобы ваш код был более чистым и модульным, используйте внедрение зависимостей.

Рекомендуем почитать
Логарифмическая линейка: что это и как работает? Интересно о сложном
Пришел комментарий: «Расскажите, что такое логарифмическая линейка и как она работает». Честное слово – удивилась. А потом подумала: «А ведь на самом деле, новое поколение просто не знает, что это такое и зачем вообще нужна эта линейка. Поэтому, сегодня мы с вами познакомимся с интересным и немного старинным инструментом – логарифмической линейкой. Не бойтесь – всё гораздо проще, чем может показаться! Давайте разбираться вместе. Логарифмическая линейка – это не совсем обычная линейка, она состоит из двух линеек и размеченная не совсем привычным образом...
Зависимость. Как самостоятельно избавиться от неё? Алгоритм первых шагов
Если вы готовы избавиться от своей зависимости - вам нужно выполнить ряд динамичных шагов. На каждом из этапов вас ждут трудности. Основные препятствия: Не сдавайтесь и продолжайте борьбу снова и снова. Используйте эту инструкцию как опору. 1. Признать зависимость Зависимость коварна, и решиться на борьбу с ней - очень смелый шаг. Чтобы начать, необходимо признать, что зависимость у вас существует. И это самый важный шаг на данном этапе. У всего есть причина, и следствие. Вам предстоит честно взглянуть...
Что на самом деле происходит с интернетом: почему он то отваливается, то замедляется?
Уже более полугода интернет ведет себя нестабильно: скорость иногда падает до предела терпения, а порой и вовсе невозможно подключиться к интернету. При этом катаклизм происходит сразу у всех провайдеров. То есть проблема не в вашей сети, не на стороне провайдера… А на чьей же тогда стороне? Одна из них - все дело в оборудовании, предоставляющем интернет. Ведь иностранные компании, обслуживающие сети, ушли с российского рынка и забрали все, что могли, а что не смогли - на то не дают обновления. Пришлось...
Документы, вакансии и контакты