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
4 Комментариев
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
GenIPTV Provider
13 дней назад

The Best Premium IPTV Service WorldWide!

Antone Payne
6 дней назад

magnificent points altogether, you just gained a {logo new|a new} reader. What may you suggest in regards to your put up that you made a few days ago? Any certain?

우리카지노더킹
3 дней назад

Attractive section of content. I just stumbled upon your web site and in accession capital to assert that I acquire in fact enjoyed account your blog posts. Anyway I’ll be subscribing to your feeds and even I achievement you access consistently quickly.

우리카지노
2 дней назад

I don’t even know how I ended up here, but I thought this post was great. I do not know who you are but certainly you’re going to a famous blogger if you aren’t already 😉 Cheers!

Social media & sharing icons powered by UltimatelySocial
4
0
Нравится? Оставьте комментарий!x
()
x