D jak Dependency Inversion Principle, czyli Zasada odwrócenia zależności

przez | 24 lutego, 2020

Dependency inversion principle — Zasada odwrócenia zależności

Wysokopoziomowe moduły nie powinny zależeć od modułów niskopoziomowych i detali, lecz zależność powinna wynikać z abstrakcji.

Wszystkie wysokopoziomowe moduły powinny być związane z niskopoziomowymi za pomocą abstrakcji. Abstrakcje nie powinny zależeć od detali, lecz to detale powinny być zależne od abstrakcji.

Pomocne w spełnieniu tej zasady jest przestrzeganie tych reguł:

  • Każda zmienna w klasie jest referencja do abstrakcji.
  • Wszystkie klasy dziedziczą po abstrakcji.
  • Żadna klasy potomna nie przesłania metod z klasy bazowej.
  • Ustawianie zmiennych realizowane jest przez wzorzec fabryki lub wstrzykiwania zależności.

Regułę tę można stosować do metod, funkcji, klas, modułów oraz pakietów.

Zalety

  • Łatwiejsze wymienianie komponentów.
  • Łatwiejsze wprowadzanie zmian w oprogramowaniu.
  • Łatwiejsze ponowne wykorzystywanie komponentów.
  • Łatwiejsze testowanie.

Wady

  • Konieczność korzystania z interfejsów i klas abstrakcyjnych.
  • Pracochłonność w tworzeniu stabilnych abstrakcji.
  • Konieczność korzystania z fabryk lub wstrzykiwania zależności.

Przykład

  • Klasa generująca raport (wysoki poziom) korzysta klasy logującej informacje o wyjątkach w aplikacji (niski poziom). Musi przekazać m.in. ścieżkę do folderu z logami. Zmiana klasy logującej do pliku na klasę logującą do bazy danych wymusi zmianę w klasie generującej raport, bo trzeba będzie przekazać inne dane do konstruktora klasy logującej.
  • Klasa Kopiarka wykorzystująca klasę Czytnika i klasę Zapisywacza. Jeżeli mamy użyte klasy, a będziemy chcieli zmienić sposób zapisywania (z drukowania na drukarce, w generowanie pdfa), to będziemy musieli zmienić również klasę Kopiarka albo stworzyć nową klasę KopiarkaPdf. Gdyby klasa Kopiarka miała referencje do interfejsów IZapisywacz, to wystarczyłoby wstrzyknąć w nią odpowiednią implementację IZapisywacza, aby osiągnąć nasz cel.

Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

Źródła

Obraz główny

Materiały

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *