Dependency Injection w Androidzie
-
Upload
the-software-house -
Category
Technology
-
view
528 -
download
1
Transcript of Dependency Injection w Androidzie
Sztyletem w serceDI vs zielony robocik
Andrzej SzmajntaAndroid Developer
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
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ławinformuje
NIGDY W ŻYCIU!
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ławdaje do zrozumienia
DOSKONALE!
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
ŹLE!Przykład z kodu
BARDZO DOBRZE!Przykład z kodu
BARDZO DOBRZE!Przykład z kodu
2/10
ROZWIĄZANIE GODNE NINJA MASTA DEVELOPERA
TweeterClientTweeterApiInterface
TweeterRestApiV1 TweeterMockApi
TweeterRestApiV2
TweeterClientTweeterApiInterface
TweeterRestApiV1 TweeterMockApi
TweeterRestApiV2
Android, MVP LoginActivity
LoginPresenter
AuthenticationRepo
NetworkLibraryUserSession
SharedPreferencesNetworkClientJSONParser
TokenRefresher NetworkLogger
Android, MVP i DI
Nieładnie?
A co jeśli Wam powiem, że jest biblioteka która zrobi to za nas?
Nieładnie?
A co jeśli Wam powiem, że jest biblioteka która zrobi to za nas?
Dagger 2 na pomoc!
Android, MVP i DI + Dagger 2
Fajnie? Ale po kolei...
Dagger 2 - Instalacja
Plik build.gradle
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
compile 'com.google.dagger:dagger:2.x'
apt 'com.google.dagger:dagger-compiler:2.x'
provided 'javax.annotation:jsr250-api:1.0'
}
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
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)
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
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
Z kodu wzięte!
Dagger 2 i LoginActivity
Android Studio
Podsumowanie
Dziękuje za uwagę!Podsumowanie