Описание тега dependency-inversion
Роберт Мартин освещал принцип открытости-закрытости и принципа подстановки лисков в статьях, опубликованных в начале 1996 года. В его следующей статье обсуждались последствия применения этих принципов к объектно-ориентированным программам.
Структура, которая является результатом неукоснительного использования [OCP и LSP], может быть обобщена в принцип сама по себе. Я называю это "Принцип инверсии зависимостей" (DIP).
Мартин предполагает, что плохой дизайн программного обеспечения является жестким, хрупким и неподвижным; и эти характеристики имеют общую причину.
Что делает конструкцию жесткой, хрупкой и неподвижной? Это взаимозависимость модулей в рамках этого проекта.
DIP пытается уменьшить эту взаимозависимость двумя способами. Здесь утверждается.
- Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Мартин достигает этих целей, беря традиционные процедурные зависимости, выполняющиеся от модуля высокого уровня к модулю низкого уровня, и заменяя их абстракциями (например, интерфейсами), которые существуют независимо от модулей низкого уровня, которые их реализуют.
Результатом введения абстракций, которые живут вне низкоуровневых модулей, является обращение (то есть инверсия) к предыдущему направлению зависимости. Вместо того, чтобы зависимость от высокого уровня вниз до модулей низкого уровня, модули низкого уровня имеют зависимость, указывая на их абстракции.
Позже Мартин включил DIP в качестве пятого из своих твердых принципов.
См. Статью DIP в разделе Принципы OOD.