Andrzej Szmajnta - Sztyletem w serce - DI vs zielony robocik
http://www.tsh.io
Dependency Injection omówione w kontekście aplikacji na Androida. Wykorzystanie biblioteki Dagger do wstrzykiwania zależności, konfiguracja i przykłady.
Prezentacja z meetupu http://www.meetup.com/Uszanowanko-Programowanko/events/233585217/
2. Kod napisany SOLIDnie
Pięć założeń programowania obiektowego zaproponowanych przez Roberta
C. Martina
S - (SRP) - zasada jednej odpowiedzialności
O - (OCP) - zasada otwarte-zamknięte
L - (LSP) - zasada podstawienia Liskov
I - (ISP) - zasada segregowania interfejsów
D - (DIP) - zasada odwrócenia zależności
3. Przykład z życia (zbieżność imion przypadkowa)
Rząd
pani Beaty
Piotruś,
min. kultury
Antek,
min. obrony
Zbyszek,
min. dyktafonu
wybiera
wybiera
wybiera
Jarosław
informuje
NIGDY W ŻYCIU!
4. Przykład z życia (zbieżność imion przypadkowa)
Rząd
pani Beaty
Piotruś,
min. kultury
Antek,
min. obrony
Zbyszek,
min. dyktafonu
wybiera
wybiera
wybiera
Jarosław
daje do zrozumienia
DOSKONALE!
5. DI - dependency injection
jest rozwiązaniem projektowym, często określanym jako wzorcem projektowym,
który pozwala na tworzenie kodu o luźniejszych powiązaniach, łatwiejszego
w testowaniu i modyfikacji. Jest implementacją zasady odwrócenia sterowania.
Co o tym mówi Wikipedia
19. Dagger 2 - @Inject
● Adnotacja zgodna ze standardem JSR-330 (czyli nic nowego)
● Wskazuje miejsce wstrzyknięcia zależności
● Może być dodane do nie-prywatnych pól,
metod oraz konstruktorów
20. Dagger 2 - @Module + @Provides
● @Module dodawany do klasy dostarczającej zależności
● @Provides dodawany do każdej metody modułu,
która ma dostarczać zależności (bo nie każda musi)
21. Dagger 2 - @Component
● Interfejs
● Most pomiędzy @Module i @Injectem
● Na podstawie klasy z adnotacją tworzony jest injector
● Musi wiedzieć, jakimi modułami dysponuje
● Rejestruje odbiorców zależności
22. Dagger 2 - @Scope
● Określa cykl życia tworzonej adnotacji
● Podstawowy to @Singleton
● Można tworzyć własne i dodać do metod z
@Provides
● Najczęściej własne to @PerApp, @PerActivity,
@PerFragment