Что такое внедрение зависимостей? - PullRequest
2885 голосов
/ 25 сентября 2008

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

Что такое внедрение зависимостей и когда / почему его следует или не следует использовать?

Ответы [ 34 ]

1 голос
/ 01 июля 2018

Из книги Кристоффера Норинга, книги Пабло Дилемана «Углубленное обучение - второе издание»:

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

1 голос
/ 18 ноября 2016

Внедрение зависимостей представляет собой тип реализации принципа " Inversion of Control ", на котором основано построение Frameworks.

Frameworks , как указано в «Шаблоне проектирования» GoF, - это классы, которые реализуют основную логику потока управления, побуждая разработчика сделать это, таким образом, Frameworks реализует принцип инверсии управления.

Способ реализации как техника, а не как иерархия классов, этот принцип IoC - это просто внедрение зависимости.

DI состоит главным образом в делегировании отображения экземпляров классов и ссылки на тип этих экземпляров на внешнюю "сущность": объект, статический класс, компонент, каркас и т. Д. *

Экземплярами классов являются " зависимости ", внешняя привязка вызывающего компонента с экземпляром класса через ссылку, это " инъекция ».

Очевидно, что вы можете реализовать эту технику по-разному с точки зрения ООП, см., Например, инжекция конструктора , инъекция сеттера , инъекция интерфейса .

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

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

0 голосов
/ 05 января 2019

DI - это то, как реальные объекты фактически взаимодействуют друг с другом, при этом один объект не отвечает за существование другого объекта. Объекты должны рассматриваться в равенстве. Они все объекты. Никто не должен вести себя как создатель. Вот как ты делаешь справедливость по отношению к своим объектам.

Простой пример :

если вам нужен врач, вы просто идете и находите (уже существующего) врача. Вы не будете думать о создании врача с нуля, чтобы помочь вам. Он уже существует, и он может служить вам или другим объектам. Он имеет право на существование независимо от того, нужен ли он вам (одному объекту) или нет, потому что его цель - обслуживать один или несколько объектов. Кто решил, что его существование - Всемогущий Бог, а не естественный отбор. Поэтому одно из преимуществ DI состоит в том, чтобы избегать создания бесполезных избыточных объектов, живущих без цели в течение жизни вашей вселенной (то есть приложения).

0 голосов
/ 27 марта 2017

Любое нетривиальное приложение состоит из двух или более классов, которые взаимодействуют друг с другом для выполнения некоторой бизнес-логики. Традиционно каждый объект отвечает за получение своих собственных ссылок на объекты, с которыми он сотрудничает (его зависимости). При применении DI объектам при создании создаются их зависимости от некоторого внешнего объекта, который координирует каждый объект в системе. Другими словами, зависимости вводятся в объекты.

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

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