Инверсия зависимостей (Dependency Inversion Principle, DIP) — это принцип проектирования (часть S.O.L.I.D.). Он гласит, что:
Инъекция зависимостей (Dependency Injection, DI) — это шаблон проектирования, реализующий принцип инверсии зависимостей. Он позволяет внедрять зависимости (объекты, от которых зависит данный класс) извне, вместо того чтобы класс создавал их сам.
Основные отличия:
Пример без инверсии зависимостей:
java
Здесь Service (модуль верхнего уровня) напрямую зависит от Database (модуль нижнего уровня). Это нарушает DIP.
Пример с инверсией зависимостей (используя инъекцию зависимостей):
java
В этом примере Service зависит от абстракции DataStorage, а не от конкретной реализации Database. Конкретная реализация Database предоставляется Service извне через конструктор (инъекция зависимостей). Это соответствует DIP и реализовано с помощью DI.