От автора: этим уроком мы закрываем небольшой цикл видео по разбору SOLID принципов. Принцип инверсии зависимостей важнейший принцип в объектно-ориентированном программировании на PHP, использование которого значительно уменьшает связность всего проекта в целом.
Традиционно начнем с определения. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Скорее всего, Вы догадались, что если речь идет о каких либо абстракциях, то, по всей видимости, в структуре классов будут использоваться либо интерфейсы, либо абстрактные классы. То есть элементы, которые абстрагируют нас от конкретных реализаций. И это действительно так.
Ключевое слово «Модуль», на которое опирается определение, по сути, означает определенную совокупность элементов, которые направлены на решение одной конкретной задачи. При этом, если мы говорим о модульном проекте, то подразумевается не один модуль, а целая группа, которые связываются между собой определенным образом в зависимости от поставленных задач. И, как правило, указанная связь и приносит массу нежелательных проблем, которых можно избежать, используя принцип инверсии зависимостей.
Если сказать немного проще, то указанный принцип предлагает заменить прямые связи между родительским и дочерним модулем связью с определенным интерфейсом. В таком случае, родители будут зависеть от интерфейса то есть абстракции, а дочерние элементы как реализации интерфейсов, в свою очередь, будут зависеть от соответствующих интерфейсов. Таким образом, прямая связь, между элементами инвертируется.
Более подробно, указанный принцип на примерах и графических диаграммах показан в видео версии урока.