Рубрики
Без рубрики

Что такое Внедрение зависимостей?

Привет!! Внедрение зависимостей – не новый термин для разработчиков с многолетним опытом. Но для младшего… Помечено как java, новички, внедрение зависимостей, весна.

Привет!!

Внедрение зависимостей – не новый термин для разработчиков с многолетним опытом. Но для младшего разработчика это может привести к путанице. Цель этого поста – объединить некоторые примеры, которые я нашел в Интернете, которые были очень полезны для меня в понимании, и объяснить их своими словами.

Давайте посмотрим, как википедия определяет внедрение зависимостей:

В программной инженерии внедрение зависимостей – это метод, при котором один объект предоставляет зависимости другого объекта. “Зависимость” – это объект, который можно использовать, например, в качестве службы. Вместо того, чтобы клиент указывал, какую услугу он будет использовать, что-то подсказывает клиенту, какую услугу использовать.

Что ж, в нем прекрасно указано, что такое внедрение зависимостей.

Теперь позвольте мне попытаться объяснить это, сравнив со сценарием реальной жизни,

Учтите, что ваша работа требует, чтобы вы путешествовали много раз в месяц, и в вашей организации есть предпочтительный набор агентств, с которыми можно связаться для поездки.

Планирование путешествия можно представить в двух сценариях,

Сценарий 1 У вас есть полная информация о предпочитаемой авиакомпании, агентствах по прокату автомобилей или такси, с которыми нужно связаться. Так,

  • Вы звоните в предпочитаемые агентства для бронирования авиабилетов и автомобилей.
  • Вы сообщаете им пункт назначения и дату поездки.
  • Они делают необходимые заказы и сообщают вам маршрут.

Сценарий 2 Существует отдел управления поездками, который занимается поездками сотрудников. Он предоставляет услуги онлайн-чата или автоматизированные телефонные услуги, которые позволяют вам связаться с этими агентствами.

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

Предположим, что ваша организация меняет предпочитаемые агентства, а у новых агентств новые контактные данные и совершенно другие механизмы бронирования. Затем,

В сценарии 1 вам необходимо обновить все контакты и адаптироваться к новым механизмам бронирования новых агентств.

В сценарии 2 отдел управления поездками скорректирует свой рабочий процесс за кулисами, чтобы иметь возможность общаться с агентствами, чтобы не повлиять на вас.

Хорошо, как это связано с внедрением зависимостей? В обоих сценариях вы являетесь клиентом и зависите от услуг, предоставляемых агентствами.

Однако сценарий 2 имеет несколько отличий: административный отдел предоставляет вам услуги агентств в качестве зависимостей таким образом, чтобы вы могли их повторно использовать. Если в услугах произошли какие-либо изменения, вам как клиенту не требуется никаких изменений.

Внедрение зависимостей в контексте программного приложения:

Любое приложение можно представить в виде графика объектов, которые зависят друг от друга. Каждый объект играет либо роль клиента и использует другие объекты (услуги), либо предлагает услуги другому компоненту, либо и то, и другое.

Каждый объект должен знать, “с какими” объектами взаимодействовать, “где” их размещать и “как” с ними взаимодействовать. Когда способ доступа к таким службам/объектам изменяется, они потенциально могут привести к значительным изменениям на стороне клиента.

Передача задачи создания объекта кому-либо другому и непосредственное использование зависимости называется внедрением зависимостей.

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

Для достижения внедрения зависимостей нам необходимо,

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

Пример организации в этой статье взят из Руководство для начинающих по внедрению зависимостей

Оригинал: “https://dev.to/sphoorthi/what-is-dependency-injection-312c”