Един от принципите на SOLID е инверсията на зависимостите. Има много ресурси с подробно описание на инверсия на зависимости, като например книги и статии. И повечето кандидати на интервю за работа отговарят успешно на въпроса: „Какво е инверсия на зависимости?“. Но когато настъпи реална практика, възниква друг въпрос какво означава инверсията и как да я програмираме?

Зависимост от подробности за изпълнението

Нека направим малко въведение в началото на програмирането. Първите програми, преди изобретяването на полиморфизма и обектно-ориентираното програмиране, изглеждаха така.

Зависимостите бяха насочени в същата посока. Но проблем има и то не един.

  1. Контролерът зависи от детайлите на изпълнението — методите CalculateFulltimeSalary() и caclculatePartialTimeSalary()
  2. Не е трудно да се разбере, че при добавяне на нов тип работник ще трябва да редактирате контролера
  3. Когато добавите отново нов метод към контролера, той расте много бързо и ще стане бъркотия

Следователно програмата е разделена на компоненти, които зависят от хардуер, данни и т.н. Следователно, ако се добави нов принтер например, достатъчно е да се програмира само драйвер, докато модулът, отговарящ за създаването на документ, остава непроменен.

Зависимост от абстракция на клас

Когато бяха въведени обектно-ориентираното програмиране и полиморфизмът, стана възможно да се скрият подробности за изпълнението чрез интерфейс на класа. Ето защо един от най-популярните ресурси е посочването

Модулите от високо ниво не трябва да импортират нищо от модули от ниско ниво. И двете трябва да зависят от абстракции (напр. интерфейси).

Което в крайна сметка доведе до следващата картина, която илюстрира зависимостите на класовете.

Диаграмата също има представяне на значението на инверсията — в даден момент стрелката на зависимостта се обръща.

Що се отнася до полиморфизма и обектно-ориентираното програмиране, тези теми надхвърлят тази статия, така че не са описани там.

Заключение

Да научите и да преминете интервюто за работа не означава солидни познания и задълбочено разбиране на техниките за програмиране. Веднага щом възникне случай на практическа употреба на инверсия на зависимост, веднага, като правило, за начинаещи възниква проблем. И, казано внимателно, толкова е странно, че няма публикации, книги или медии, които да имат кратко и ясно обяснение на петия от принципите на SOLID.

В крайна сметка, използвайки представените знания, програмистът опростява добавянето на нови модули. Това означава, че при добавяне на нов хардуер, входно или изходно устройство например, ще бъде много по-бързо и лесно и най-важното няма да доведе до промени в съществуващата кодова база.

Препратки

  1. Оригинална статия
  2. Принцип на инверсия на зависимостта
  3. СОЛИД