Koin bez tajemnic – wprowadzenie do dependency injection

Kilka lat temu, gdy stawiałem swoje pierwsze kroki w programowaniu, natknąłem się na rewelacyjną serię na blogu Mirka Stanka dotyczącą wstrzykiwania zależności w oparciu o bibliotekę Dagger. Pomyślałem, że DI (ang. dependency injection) jest na tyle uniwersalnym tematem, że można go nieco odświeżyć i pokazać jak skutecznie wdrożyć tę technikę przy pomocy biblioteki Koin. Zanim jednak przejdziemy do tajników samego narzędzia, przyjrzyjmy się od praktycznej strony czym właściwie jest wystrzykiwanie zależności.

Ten post jest początkiem serii “Koin bez tajemnic”. Zachęcam Cię do przeczytania kolejnych artykułów. Odnośniki znajdziesz poniżej.

  1. Wprowadzenie do dependency injection (aktualnie czytany)
  2. Tworzenie modułu i deklarowanie zależności

Czym jest dependency injection?

Wstrzykiwanie zależności to nic innego jak tworzenie obiektów (zależności) i umieszczanie ich (wstrzykiwanie) w miejsca, gdzie są potrzebne. Tak naprawdę w tym jednym zdaniu zawiera się sedno tej metodyki. Jak to natomiast wygląda w praktyce? Zacznijmy może od zaprezentowania antyprzykładu.

W powyższym przykładzie widzimy klasę UserRepository, która posiada interfejs Api służący do komunikacji z zewnętrznym serwerem. Jest on tworzony w bloku init. Czy to dobre podejście? Niekoniecznie. Mamy tutaj złamaną zasadę open-closed. Klasa powinna być otwarta na rozszerzenie, ale zamknięta na modyfikację. W tym przypadku nie zmienimy url’a serwera, do którego się łączymy, bez zmian w obrębie tej klasy. Jak zatem powinna wyglądać poprawna implementacja?

Tutaj zauważamy, że zależności są dostarczane z zewnątrz – przekazywane jako argument konstruktora. Klasa UserRepository nie jest już odpowiedzialna za tworzenie obiektów, których potrzebuje. W przypadku pojawienia się konieczności zmiany url’a na inny nie będzie potrzeby wprowadzania zmian w obrębie tej klasy. Ale czy to jedyna zaleta stosowania wstrzykiwania zależności?

Zalety stosowania dependency injection

  • Fakt, że zależności są dostarczane do klasy z zewnątrz pozwala na przetestowanie takiej klasy testami jednostkowymi. Bez problemu możemy zamockować dostarczane przez konstruktor elementy i tym samym uruchomić testy w odizolowanym środowisku.
  • Kolejną (i w zasadzie główną) zaletą płynącą ze stosowania wstrzykiwania zależności jest oddzielenie miejsca, w którym tworzone są obiekty od miejsca, w którym są używane. Dzięki temu kod programu staje się bardziej przejrzysty i łatwiejszy do późniejszej modyfikacji.

Ciąg dalszy

Ten artykuł to wprowadzenie do serii na temat biblioteki Koin służącej do wstrzykiwania zależności. Dalsze materiały pojawią się wkrótce na blogu.

.
Tagi:

Dodaj komentarz

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