Привет!!
Внедрение зависимостей – не новый термин для разработчиков с многолетним опытом. Но для младшего разработчика это может привести к путанице. Цель этого поста – объединить некоторые примеры, которые я нашел в Интернете, которые были очень полезны для меня в понимании, и объяснить их своими словами.
Давайте посмотрим, как википедия определяет внедрение зависимостей:
В программной инженерии внедрение зависимостей – это метод, при котором один объект предоставляет зависимости другого объекта. “Зависимость” – это объект, который можно использовать, например, в качестве службы. Вместо того, чтобы клиент указывал, какую услугу он будет использовать, что-то подсказывает клиенту, какую услугу использовать.
Что ж, в нем прекрасно указано, что такое внедрение зависимостей.
Теперь позвольте мне попытаться объяснить это, сравнив со сценарием реальной жизни,
Учтите, что ваша работа требует, чтобы вы путешествовали много раз в месяц, и в вашей организации есть предпочтительный набор агентств, с которыми можно связаться для поездки.
Планирование путешествия можно представить в двух сценариях,
Сценарий 1 У вас есть полная информация о предпочитаемой авиакомпании, агентствах по прокату автомобилей или такси, с которыми нужно связаться. Так,
- Вы звоните в предпочитаемые агентства для бронирования авиабилетов и автомобилей.
- Вы сообщаете им пункт назначения и дату поездки.
- Они делают необходимые заказы и сообщают вам маршрут.
Сценарий 2 Существует отдел управления поездками, который занимается поездками сотрудников. Он предоставляет услуги онлайн-чата или автоматизированные телефонные услуги, которые позволяют вам связаться с этими агентствами.
Всякий раз, когда вам нужно путешествовать, вы пользуетесь одной из этих услуг и предоставляете им информацию о своей поездке, такую как пункт назначения, дата и любые специфические для вас предпочтения. Агентства делают необходимые заказы и передают вам маршрут путешествия.
Предположим, что ваша организация меняет предпочитаемые агентства, а у новых агентств новые контактные данные и совершенно другие механизмы бронирования. Затем,
В сценарии 1 вам необходимо обновить все контакты и адаптироваться к новым механизмам бронирования новых агентств.
В сценарии 2 отдел управления поездками скорректирует свой рабочий процесс за кулисами, чтобы иметь возможность общаться с агентствами, чтобы не повлиять на вас.
Хорошо, как это связано с внедрением зависимостей? В обоих сценариях вы являетесь клиентом и зависите от услуг, предоставляемых агентствами.
Однако сценарий 2 имеет несколько отличий: административный отдел предоставляет вам услуги агентств в качестве зависимостей таким образом, чтобы вы могли их повторно использовать. Если в услугах произошли какие-либо изменения, вам как клиенту не требуется никаких изменений.
Внедрение зависимостей в контексте программного приложения:
Любое приложение можно представить в виде графика объектов, которые зависят друг от друга. Каждый объект играет либо роль клиента и использует другие объекты (услуги), либо предлагает услуги другому компоненту, либо и то, и другое.
Каждый объект должен знать, “с какими” объектами взаимодействовать, “где” их размещать и “как” с ними взаимодействовать. Когда способ доступа к таким службам/объектам изменяется, они потенциально могут привести к значительным изменениям на стороне клиента.
Передача задачи создания объекта кому-либо другому и непосредственное использование зависимости называется внедрением зависимостей.
Создание и обслуживание этих объектов обычно выполняется внешними контейнерами, которые также отвечают за внедрение зависимостей в объекты. Эти контейнеры часто предоставляются фреймворками, поддерживающими различные языки программирования.
Для достижения внедрения зависимостей нам необходимо,
- Сервис, который предоставляет услуги.
- Клиент, который хочет воспользоваться этими услугами.
- Интерфейс, который является абстракцией между сервисом и клиентом.
- Инжектор/контейнеры, которые создают экземпляр службы и внедряют его в клиента.
Пример организации в этой статье взят из Руководство для начинающих по внедрению зависимостей
Оригинал: “https://dev.to/sphoorthi/what-is-dependency-injection-312c”