2015-01-16 3 views
7

Я изучаю весну. Я понял инъекцию зависимости. В некотором месте я также вижу, что это называется инверсией зависимостей. Я понял, почему это называется инъекцией, но что подразумевается под «инверсией»? Какая зависимость - это фактически инвертирование?Что означает «инверсия» в инверсии зависимостей

+0

http://en.wikipedia.org/wiki/Dependency_inversion_principle – Smutje

+0

http://www.springbyexample.org/examples/core-concepts.html <- здесь ясное объяснение – Cuzz

+1

В сущности, весна инвертирует управление зависимостью от Приложение к контейнеру (весенний контейнер). Вот где инверсия зависимостей приходит в картину. – Sid

ответ

8

Хороший вопрос - слово inversion несколько удивительно (так, после применения DIP, модуль зависимости нижний уровень, очевидно, не в настоящее время depend на модуле вызывающего абонента более высокого уровня, либо - как вызывающий и зависимость теперь только более свободно связанных через дополнительную абстракцию).

Приводя Роберт C Мартин original source

Можно задаться вопросом, почему я использую слово «инверсии». Честно говоря, это связано с тем, что более традиционные методы разработки программного обеспечения, такие как структурированный анализ и дизайн, имеют тенденцию создавать программные структуры, в которых модули высокого уровня зависят от модулей низкого уровня и в которых абстракции зависят от деталей. На самом деле одной из целей этих методов является определение иерархии подпрограмм, которая описывает, как модули высокого уровня выполняют вызовы модулям низкого уровня. ... Таким образом, структура зависимостей хорошо спроектированной объектно-ориентированной программы «инвертирована» относительно структуры зависимостей, которая обычно является результатом традиционных процедурных методов.

Один момента следует обратить внимание при чтении документа Дяди Боба на DIP является то, что C++ не (и at time of writing, still doesn't) имеют интерфейсы, поэтому для достижения этой абстракции в C++, как правило, реализуются через абстрактный/чистый виртуальный базовый класс, в то время как в Java или C# абстракция для ослабления связи обычно заключается в развязывании путем абстрагирования интерфейса от зависимости и связывания модуля (ов) более высокого уровня с интерфейсом.

Редактировать Просто для уточнения:

«В каком-то месте я также вижу, что называется зависимость инверсии»

Обратите внимание, что Dependency Injection (DI) является одним из возможных вариантов реализации, чтобы достичь Принцип инверсии зависимостей (DIP) - the "D" in SOLID design principles, поэтому DI и DIP: не полностью взаимозаменяемы.

Другие DIP-реализации включают Service locator pattern (который в настоящее время often regarded как анти-шаблон); и Plugin.

3

Инверсия: Инвертирование управления зависимостями из приложения в контейнер (например, Spring).

Dependency Injection:

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

enter image description here

Так что о Инверсия управления (IoC)?

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

Инверсия управления в качестве ориентира дизайн преследует следующие цели:

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

Для получения дополнительной информации посмотрите на:

Design Pattern IOC and DI.

Design pattern – Inversion of control and Dependency injection.

A Practical Introduction to Inversion of Control.

Inversion of control (IoC) and dependency injection (DI) patterns in spring framework and related interview questions.

Смежные вопросы