Dependency Injection w Androidzie

Post on 16-Apr-2017

528 views 1 download

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