Я изучаю весну. Я понял инъекцию зависимости. В некотором месте я также вижу, что это называется инверсией зависимостей. Я понял, почему это называется инъекцией, но что подразумевается под «инверсией»? Какая зависимость - это фактически инвертирование?Что означает «инверсия» в инверсии зависимостей
ответ
Хороший вопрос - слово 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.
Инверсия: Инвертирование управления зависимостями из приложения в контейнер (например, Spring).
Dependency Injection:
Вместо того, чтобы писать заводскую картину, как о инъекционного объект непосредственно в классе клиента. Поэтому позвольте классу клиентов ссылаться на интерфейс, и мы должны иметь возможность вводить конкретный тип в класс клиента. С этим классу клиента не нужно использовать новое ключевое слово и полностью отделено от конкретных классов.
Так что о Инверсия управления (IoC)?
В традиционном программировании, то поток бизнес-логики определяется объектов, которые назначаются статически друг с другом. С инверсия управления, поток зависит от граф объекта, который создается экземпляром ассемблера и становится возможным благодаря взаимодействию объектов, определяемых посредством абстракций. Процесс связывания достигается посредством инъекции зависимостей, хотя некоторые утверждают, что использование локатора обслуживания также обеспечивает инверсию управления.
Инверсия управления в качестве ориентира дизайн преследует следующие цели:
- Существует развязки на выполнение определенной задачи из реализации.
- Каждый модуль может сосредоточиться на том, для чего он предназначен.
- Модули не делают никаких предположений о том, что делают другие системы, но полагаются на их контракты.
- Замена модулей не оказывает побочного воздействия на другие модули.
Для получения дополнительной информации посмотрите на:
Design pattern – Inversion of control and Dependency injection.
- 1. Что означает «принцип инверсии зависимостей» в ООП?
- 2. Инверсия зависимостей - владелец интерфейсов?
- 3. Инверсия управления <Инъекция зависимостей
- 4. разница между «Инверсия управления», «Dependency инверсии» и «расстыковки»
- 5. Инъекция зависимостей и инверсия управления - терминология
- 6. Принцип инверсии зависимостей в WCF
- 7. События в системе инверсии управления (инверсия зависимостей) идут в ту сторону?
- 8. Инверсия зависимостей и независимые от устройства данные
- 9. Принцип инверсии зависимостей (SOLID) против Encapsulation (Столпы ООП)
- 10. Настройка инверсии зависимостей между слоями
- 11. коррекция инверсии зависимостей Laravel 5
- 12. Нужна разъяснение об инверсии зависимостей
- 13. Инверсия управления и зависимостей Инъекция
- 14. Инверсия управления, инверсия зависимостей и пояснение разницы в локаторах службы
- 15. Дерево зависимостей Gradle, что означает (*)?
- 16. браузер зависимостей, который работает против инверсии структуры управления.
- 17. Приоритетная инверсия
- 18. Что означает «^» в списке зависимостей node.js?
- 19. Инверсия управления и зависимостей в .NET Framework
- 20. вопрос об инверсии
- 21. Инверсия зависимостей с установленным временем компиляции Инъекция зависимостей в решении ASP.NET MVC 4
- 22. Принцип инверсии зависимостей. Где должны проходить интерфейсы?
- 23. Принцип инверсии зависимостей (применительно к Java)
- 24. Сериализация конфигураций для инъекций/инверсии зависимостей
- 25. Кэширование красноречивых запросов и инверсии зависимостей
- 26. Понимание инверсии управления и зависимостей инъекции
- 27. Инверсия управления и зависимостей с POJO
- 28. ASP.Net MVC 6: Инверсия рекурсивных зависимостей
- 29. C# MongoDb Инъекция зависимостей и инверсия управления
- 30. Для кабала, что означает только флаг зависимостей?
http://en.wikipedia.org/wiki/Dependency_inversion_principle – Smutje
http://www.springbyexample.org/examples/core-concepts.html <- здесь ясное объяснение – Cuzz
В сущности, весна инвертирует управление зависимостью от Приложение к контейнеру (весенний контейнер). Вот где инверсия зависимостей приходит в картину. – Sid