Dependency Injection w Androidzie

27
Sztyletem w serce DI vs zielony robocik Andrzej Szmajnta Android Developer

Transcript of Dependency Injection w Androidzie

Page 1: Dependency Injection w Androidzie

Sztyletem w serceDI vs zielony robocik

Andrzej SzmajntaAndroid Developer

Page 2: Dependency Injection w Androidzie

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

Page 3: Dependency Injection w Androidzie

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!

Page 4: Dependency Injection w Androidzie

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!

Page 5: Dependency Injection w Androidzie

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

Page 6: Dependency Injection w Androidzie

ŹLE!Przykład z kodu

Page 7: Dependency Injection w Androidzie

BARDZO DOBRZE!Przykład z kodu

Page 8: Dependency Injection w Androidzie

BARDZO DOBRZE!Przykład z kodu

2/10

Page 9: Dependency Injection w Androidzie

ROZWIĄZANIE GODNE NINJA MASTA DEVELOPERA

Page 10: Dependency Injection w Androidzie

TweeterClientTweeterApiInterface

TweeterRestApiV1 TweeterMockApi

TweeterRestApiV2

Page 11: Dependency Injection w Androidzie

TweeterClientTweeterApiInterface

TweeterRestApiV1 TweeterMockApi

TweeterRestApiV2

Page 12: Dependency Injection w Androidzie

Android, MVP LoginActivity

LoginPresenter

AuthenticationRepo

NetworkLibraryUserSession

SharedPreferencesNetworkClientJSONParser

TokenRefresher NetworkLogger

Page 13: Dependency Injection w Androidzie

Android, MVP i DI

Page 14: Dependency Injection w Androidzie

Nieładnie?

A co jeśli Wam powiem, że jest biblioteka która zrobi to za nas?

Page 15: Dependency Injection w Androidzie

Nieładnie?

A co jeśli Wam powiem, że jest biblioteka która zrobi to za nas?

Page 16: Dependency Injection w Androidzie

Dagger 2 na pomoc!

Page 17: Dependency Injection w Androidzie

Android, MVP i DI + Dagger 2

Fajnie? Ale po kolei...

Page 18: Dependency Injection w Androidzie

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'

}

Page 19: Dependency Injection w Androidzie

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

Page 20: Dependency Injection w Androidzie

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)

Page 21: Dependency Injection w Androidzie

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

Page 22: Dependency Injection w Androidzie

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

Page 23: Dependency Injection w Androidzie

Z kodu wzięte!

Page 24: Dependency Injection w Androidzie

Dagger 2 i LoginActivity

Android Studio

Page 25: Dependency Injection w Androidzie

Podsumowanie

Page 26: Dependency Injection w Androidzie

Dziękuje za uwagę!Podsumowanie

Page 27: Dependency Injection w Androidzie