Devloger

SOLID - DIP - Reguła Odwrócenia Zależności

SOLID - DIP - Reguła Odwrócenia Zależności

Zasady Solid - DIP

No i prawie wszystkie reguły za nami Emotikon uśmiechniętej buźki.

Została już tylko jedna do omówienia, ostatnia - DIP - Reguła odwrócenia zależności Emotikon uśmiechniętej buźki.

Odnosi się ona do interfejsów (chyba cię to nie zaskakuje Emotikon uśmiechniętej buźki) 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 Emotikon uśmiechniętej buźki.

Zatem do dzieła, przed tobą DIP Emotikon uśmiechniętej buźki!

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 Emotikon uśmiechniętej buźki.

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 Emotikon uśmiechniętej buźki.

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 Emotikon uśmiechniętej buźki!

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 Emotikon uśmiechniętej buźki. Jak i również w temacie w ogóle reguł SOLID.

Zapraszam do komentowania oraz lektury innych moich artykułów Emotikon uśmiechniętej buźki.

Życzę ci dobrego dnia Emotikon uśmiechniętej buźki.

Bywaj!

Krystian Bogucki

Podobał Ci się ten artykuł?

Jeśli tak, to zarejestruj się aby otrzymywać powiadomienia o nowych artykułach. Nie ujawnię nikomu Twojego adresu!

2 komentarzy... przeczytaj komentarze albo dodaj nowy komentarz


pytanie

2020-02-14

czy w kodzie przykladowym nie jest czasem powtórzony komentarz " // wysokopoziomowy moduł polega na abstrakcji"

Devloger

2020-02-17

Nie, tam jest jeden dotyczący wysokopoziomowego modułu a drugi niskopoziomowego :).