что это такое и когда его использовать

1656517813 chto eto takoe i kogda ego ispolzovat

Бхавья Кария

Введение

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

Это определение Википедии, но тем не менее, но понять это не очень легко. Так что давайте лучше разбираться.

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

Зависимость или зависимость означает полагаться на что-либо для поддержки. К примеру, если я скажу, что мы слишком полагаемся на мобильные телефоны, это означает, что мы зависимы от них.

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

Когда класс A использует некоторую функциональность класса B, он говорит, что класс A имеет зависимость от класса B.

1*0P-1JhnUaZeobDUAajIbhA
Показ зависимостей между классами

В Java, прежде чем мы сможем использовать методы других классов, нам сначала нужно создать объект этого класса (т.е. классу A нужно создать экземпляр класса B).

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

1*TF-VdAgPfcD497kAW77Ukg
Что если бы код мог говорить?

Почему я должен использовать инъекцию зависимостей?

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

Здесь класс автомобиля отвечает за создание всех объектов зависимостей. Теперь, если мы решим отказаться MRFWheels в будущем и хотите использовать Йокогама Колеса?

Нам нужно будет воспроизвести автомобильный объект с новой зависимостью Yokohama. Но при использовании инъекции зависимостей (DI) мы можем изменить колеса во время выполнения (поскольку зависимости можно внедрять во время выполнения, а не при компиляции).

Вы можете считать посредником DI в нашем коде, который выполняет всю работу по созданию желаемого объекта wheels и предоставлению его класса Car.

Это делает наш класс Car независимым от создания объектов Wheels, Battery и т.д.

В основном существует три типа инъекции зависимости:

  1. инъекция конструктора: зависимости предоставляются через конструктор классов.
  2. инъекция сеттера: клиент предоставляет метод настройки, используемый инжектором для ввода зависимости.
  3. интерфейс инъекции: зависимость предоставляет метод инжектора, который внедрит зависимость у любого переданного ему клиента. Клиенты должны реализовать интерфейс, предоставляющий метод установки, принимающий зависимость.

Итак, теперь инъекция зависимости отвечает за:

  1. Создайте объекты
  2. Знайте, для каких классов нужны эти объекты
  3. И предоставить им все эти объекты

Если есть какие-либо изменения в объектах, тогда DI рассматривает это, и это не должно касаться класса, использующего эти объекты. Таким образом, если объекты изменятся в будущем, то его DI несет ответственность за предоставление соответствующих объектов класса.

Инверсия управления — концепция DI

Это утверждает, что класс не должен настраивать свои зависимости статически, а должен быть сконфигурирован каким-либо другим классом извне.

Это пятый принцип ТВЕРДЫЙ — тот пять основных принципов объектно-ориентированного программирования и проектирования Дядя Боб — утверждающий, что класс должен зависеть от абстракции, а не от конкреций (просто говоря жестко закодированных).

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

Примечание: если вы хотите узнать о ТВЕРДЫЙ принципы дяди Боба, то вы можете перейти по этой ссылке.

Преимущества использования DI

  1. Помогает в модульном тестировании.
  2. Код котла уменьшен, поскольку инициализация зависимостей выполняется компонентом инжектора.
  3. Расширение программы становится проще.
  4. Помогает включить слабое соединение, важно при программировании.

Недостатки ДИ

  1. Это немного сложно научиться, и если его чрезмерное использование может привести к проблемам управления и других проблем.
  2. Многие ошибки при компиляции переносятся на время выполнения.
  3. Фреймворки внедрения зависимостей реализуются посредством отображения или динамического программирования. Это может препятствовать использованию автоматизации IDE, например «найти ссылку», «показать иерархию вызовов» и безопасный рефакторинг.

Вы можете реализовать инъекцию зависимостей самостоятельно (Pure Vanilla) или использовать сторонние библиотеки или фреймворки.

Библиотеки и фреймворки, реализующие DI

Чтобы узнать больше об инъекции зависимостей, вы можете ознакомиться с следующими ресурсами:

Инъекция зависимости Java — Учебник с примером шаблона DI — JournalDev

Использование инъекции зависимостей в Java — Введение — Учебник — Vogella

Инверсия контрольных контейнеров и шаблон инъекции зависимости — Мартин Фаулер

Надеюсь, это поможет!

Если вам понравилась статья и хотите читать больше удивительных статей, то подпишитесь на меня здесь (Бхавья Кария) и покажите свою поддержку, поскольку это мотивирует меня писать больше.

Если у вас есть вопросы или отзывы ко мне, давайте соединимся на LinkedIn, Twitter, Facebook.

Редактировать 1:

Благодаря Сергею Уфокодеру теперь эта статья переведена на русский язык. Мои русские друзья и все, кто умеет читать по-русски, обязательно почитайте.

Ссылка на статью

Кроме того, если вы хотите применить DI в JavaScript и ищете библиотеку, Джо Суррикат предлагает вам попробовать его библиотеку.

Ди-Ниндзя

Еще одну замечательную библиотеку DI в JavaScript предложил Николас Фроудур.

ножевой цикл

Редактировать 2:

Если вы разработчик PHP, то не беспокойтесь, вы также рассказали обо всем. Гордон Форсайт порекомендовал эту удивительную библиотеку, которую вы все, возможно, захотите попробовать.

аурин

Благодарю всех теплых слов, которые я получал. Поделитесь статьей, чтобы все больше и больше людей могли извлечь пользу.

Если вы узнали хотя бы что-нибудь, поделитесь этой историей!

Добавить комментарий

Ваш адрес email не будет опубликован.