SOLID DIP
#программирование

SOLID. Что значит D

Настало время обсудить последний крайний из принципов SOLID – Dependency Inversion Principle, он же DIP, он же принцип инверсии зависимостей. В качестве примера рассмотрим постройку дома и увидим, как все пройдет в зависимости от того, используем ли мы принцип или игнорируем его. Спойлер: лучше использовать!

Что такое DIP

Принцип инверсии зависимостей состоит из двух основных постулатов:

  1. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
  2. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Если приглядеться, то можно заметить, что оба постулата говорят примерно об одном и том же 🙂

Давайте разберем этот Dependency Inversion Principle на конкретном примере и посмотрим, что случится, если им пренебречь. А затем посмотрим, что произойдет, если принципом инверсии зависимостей все-таки воспользоваться.

Пример – пренебрежение DIP

Представьте, что вы строите загородный дом на заказ. Вы еще не выслушали требования и пожелания заказчиков по проекту, но уже съездили в Леруа Мерлен и закупили там:

  1. Обои и клей для них
  2. Доски
  3. Гвозди
  4. Шурупы

Вы купили все это, потому что уже строили в прошлом загородные дома, и, как правило, они строились из дерева. Отсюда доски, гвозди и шурупы. А внутри вы решили отделать все обоями и заблаговременно запаслись клеевым раствором.

Вы пренебрегли принципом инверсии зависимостей и сразу же перешли к деталям. Тем самым компонентам, из которых будет построен весь большой дом.

И тут заказчики говорят вам: «Мы хотим дом из газобетонных блоков, а ремонт в стиле лофт. Хотим, чтобы внутри все было отделано декоративным кирпичом».

Вам в голову закрадывается мысль, что, вероятно, вы поторопились. Но вы лишь отмахиваетесь от нее и добавляете в заказ газобетонные блоки и декоративный кирпич. При всем этом, цемент вы решили не покупать, потому что у вас уже есть шурупы – не пропадать же добру! К тому же, у вас есть много клея, помните?

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

Далее переходим к ремонту. У вас еще осталось немного клея для обоев, и именно на него вы сажаете декоративный кирпич на стены. Тут вроде бы тоже все выглядит как задумывалось, с одним лишь «но»: клей для обоев не удержит кирпич, и спустя недолгое время он начнет отваливаться. Так же и ваш проект начнет разваливаться на части.

У вас еще остались доски – надо же их куда-то потратить? Часть вы крепите к стенам на гвозди – чем не лофт? Хотя на самом деле это уже скандинавский стиль, но это уже детали. Другую часть досок вы кладете на пол и ничем не крепите. В итоге доски тоже начнут отваливаться и съезжать.

Вывод – вроде бы дом стоит и даже внешне похож на то, что изначально хотелось. Но такой дом не простоит долго. Так же и ваш проект начнет трещать по швам со временем.

Разработчики, которые пренебрегают принципом инверсии зависимостей, выглядят так:

Зря я не читал про SOLID и проигнорировал DIP
Следование DIP

Если же вы решите сделать все как следует, то вы сначала выслушаете требования к проекту, и только затем приобретете необходимые компоненты.

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

Построенный вами дом дом будет не просто выглядеть как планировалось, он будет еще и качественным. Такой дом не начнет разваливаться даже спустя продолжительное время, и в нем будет приятно жить.

Разработчики, которые следуют DIP, выглядят так:

Хорошо, что я воспользовался DIP
Вывод

Умные дядьки не зря придумали принципы написания хорошего кода. Не игнорируйте SOLID, и DIP в частности. Будьте молодцом, и в будущем это вам отзовется.

Понравилось? Подписывайтесь на меня в соцсетях!

 
Twitter
VK

Предыдущие статьи из цикла SOLID:
S: https://baddev.ru/solid-srp/
O: https://baddev.ru/solid-ocp/
L: https://baddev.ru/solid-lsp/
I: https://baddev.ru/solid-isp/

guest
0 Комментариев
Inline Feedbacks
View all comments
Social media & sharing icons powered by UltimatelySocial
0
Нравится? Оставьте комментарий!x
()
x