Zasada odwrócenia zależności (Dependency Inversion Principle, DIP) to piąta z zasad SOLID. Mówi, że moduły wysokiego poziomu, zawierające logikę biznesową, nie powinny zależeć od modułów niskiego poziomu, takich jak baza danych czy mailer. Obie warstwy mają zależeć od abstrakcji, czyli interfejsów.
Co to znaczy w praktyce?
Zamiast tworzyć wewnątrz serwisu konkretny obiekt MySqlRepozytorium, serwis zależy od interfejsu Repozytorium, a konkretną implementację otrzymuje z zewnątrz. Kierunek zależności zostaje „odwrócony”: to szczegóły dostosowują się do interfejsu zdefiniowanego przez logikę biznesową.
DIP a wstrzykiwanie zależności
Zasada opisuje cel projektowy, a wstrzykiwanie zależności jest techniką jego osiągnięcia. Do dostarczania obiektów często używa się kontenera DI, ale zasada nie wymaga żadnego konkretnego frameworka.
Korzyści
Można zmienić bazę danych lub dostawcę poczty bez ruszania logiki biznesowej, a testy jednostkowe używają prostych atrap zamiast prawdziwych usług.
Przykład w kodzie
Klasa ZamowieniaUsluga przyjmuje w konstruktorze obiekt implementujący PowiadomieniaInterfejs. Dla produkcji przekazujesz klasę wysyłającą e-mail, a w testach prostą atrapę, która tylko zapisuje wywołania. Usługa nie wie, jak wysyłane są powiadomienia, więc zmiana dostawcy poczty wymaga napisania nowej implementacji, bez dotykania logiki zamówień.
Powiązane pojęcia
Wszystkie hasła z kategorii Programowanie i wzorce projektowe