SOLID - DIP - Reguła Odwrócenia Zależności
No i prawie wszystkie reguły za nami .
Została już tylko jedna do omówienia, ostatnia - DIP - Reguła odwrócenia zależności .
Odnosi się ona do interfejsów (chyba cię to nie zaskakuje ) oraz abstrakcji w naszej aplikacji. A konkretnie do jej składowych (modułów).
Skup się, czytaj uważnie i staraj się zrozumieć, to akurat stosunkowo trudna do zrozumienia reguła .
Zatem do dzieła, przed tobą DIP !
Dependency Inversion Principle
DIP (Dependency Inversion Principle) - Reguła, która mówi, że wysokopoziomowe moduły nie powinny zależeć od modułów niskopoziomowych - zależności między nimi powinny wynikać z abstrakcji. Moduły powinny polegać na abstrakcji (nie konkretach). Tak samo niskopoziomowe moduły również powinny polegać na abstrakcji.
Dość trudna do zrozumienia definicja.
Czym jest wysokopoziomowy i niskopoziomowy kod?
Wysokopoziomowy kod nie jest zainteresowany detalami.
Natomiast niskopoziomowy kod jest przeciwieństwem kodu wysokopoziomowego, jest bardzo zbliżony do detali i całej specyfiki.
Więc reguła ta mówi, że wysokopoziomowy kod nie powinien nigdy polegać na niskopoziomowym kodzie.
Lub innymi słowami, jedna klasa nie powinna być zmuszona do polegania na konkretnej implementacji. Zamiast tego, powinna polegać na kontrakcie/abstrakcji/interfejsie.
Przykład
<?php
interface ConnectionInterface
{
public function connect();
}
// niskopoziomowy moduł polega na abstrakcji
class MySQLConnection implements ConnectionInterface
{
public function connect()
{
//
}
}
// wysokopoziomowy moduł polega na abstrakcji
class PasswordReminder
{
/**
* @var ConnectionInterface
*/
protected $dbConnection;
public function __construct(
ConnectionInterface $dbConnection // Dependency Injection daje nam możliwość polegania na abstrakcji (DIP)
) {
$this->dbConnection = $dbConnection;
}
}
Po co DIP?
Stosowanie się do tej reguły pozwala nam mocno rozdzielić zależności w naszym kodzie (decoupling). I to wszystko sprowadza się do jednego. Do lepszego projektowania naszych aplikacji .
A kiedy myślimy o słabym projektowaniu aplikacji, mamy na myśli kod który jest trudno zmienić (np. klasa albo komponent który strach dotknąć bo wszystko się zawali - to z całą pewnością źle zaprojektowany kod).
Kod taki przypomina spaghetti, w którym ciężko cokolwiek dotknąć, ponieważ wszystko jest ściśle powiązane i wymieszane. W programowaniu sprowadza się to do słabego designu.
Na szczęście te wszystkie (połączone) reguły które omawiam, pomagają nam projektować lepsze aplikacje .
Podsumowanie
Wysokopoziomowe moduły nigdy nie powinny polegać na modułach niskopoziomowych. Zależności między nimi powinny wynikać z abstrakcji. Wszystko po to aby poprawić design naszej aplikacji i rozdzielić zależności w naszym kodzie !
Pamiętaj, że Dependency Injection to nie Dependency Inversion! Dependency Injection jest bardzo ważne i pozwala na Dependency Inversion ale to nie jest to samo.
DIP Done!
I to wszystko w temacie ostatniej reguły SOLID . Jak i również w temacie w ogóle reguł SOLID.
Zapraszam do komentowania oraz lektury innych moich artykułów .
Życzę ci dobrego dnia .
Bywaj!