Краткое введение в внедрение зависимостей: что это такое и когда его использовать

Перейти к профилю Бхавья Кариа

Бхавья КарияЗаблокированоUnblockFollowFollowing

18 октября 2018 г.


фото необработанный пиксель на Скрыть

Введение

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

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

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

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

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

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


Отображение зависимостей между классами

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

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


Что, если бы код мог говорить?

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

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

Без внедрения зависимостей (DI)

Здесь класс car отвечает за создание всех объектов зависимостей. Теперь, что, если мы решим бросить 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, Твиттер , Фейсбук.

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

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

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

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

В-ниндзя

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

ножцикл

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

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

аурин

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

Похожие записи

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *