際際滷

際際滷Share a Scribd company logo
Architektura
aplikacji Android
UKASZ ANDRZEJEWSKI
Prowadzcy
u ukasz Andrzejewski
u Trener
u Programista
u Kontakt
u l.andrzejewski@sages.com.pl
u http://pl.linkedin.com/in/lukaszandrzejewski
u https://github.com/landrzejewski
Agenda
u Dlaczego architektura jest wa甜na?
u Zo甜ono aplikacji mobilnych
u Czysta architektura
u Model View Presenter
u Model View ViewModel
u Flux
u Is about intent, not frameworks
Dlaczego architektura jest wa甜na?
u Okrela komponenty skadowe aplikacji, ich rol oraz wzajemne
relacje
u Uatwia
u skalowanie
u testowanie
u rozw坦j / utrzymanie
u ponowne wykorzystanie kodu
u zrozumienie dziaania aplikacji
Zo甜ono aplikacji mobilnych
u Wybrane, niebiznesowe aspekty, kt坦re nale甜y uwzgldni podczas
budowania aplikacji na platformie Android
u kompatybilno wsteczna
u zo甜ono API
u r坦甜norodno komponent坦w (cykl 甜ycia, przeznaczenie)
u zarzdzanie stanem i jego synchronizacja (lokalnie, z serwerem)
u wielowtkowo
u oszczdzanie zasob坦w (pami, procesor, sie)
u integracja z bibliotekami zewntrznymi
Architektura na platformie Android
u Nie ma oficjalnych rekomendacji / wzorc坦w
u W sieci mo甜na znale添 przykady wykorzystujce r坦甜ne podejcia
u Wielu programist坦w lekcewa甜y problem (na szczcie to si zmienia)
Architektura Android - klasycznie
u Podzia aplikacji na
u Model - realizuje dostp do danych (baza, REST API)
u Widok - prezentuje interfejs, odpowiada za interakcje z u甜ytkownikiem,
czsto zawiera fragmenty logiki biznesowej
u Problemy
u Du甜a odpowiedzialno na poziomie warstwy widoku (aktywnoci i
fragmenty staj si bardzo du甜e i trudne w utrzymaniu)
u Testy jednostkowe s praktycznie niemo甜liwe (logika jest zaszyta na poziomie
aktywnoci i fragment坦w)
u Trudnoci z ponownym wykorzystaniem kodu
u Niska jako (duplikacja, zy podzia odpowiedzialnoci, callback hell itd.)
u Zdarza si, 甜e cz kodu jest przenoszona do klas pomocniczych
(tzw. helper坦w), ale to nie rozwizuje wszystkich problem坦w
Czysta architektura
(wedug Uncle Bob)
The Dependency Rule
Nothing in an inner circle can know
anything at all about something in an
outer circle. In particular, the name of
something declared in an outer circle
must not be mentioned by the code in
the an inner circle. That includes,
functions, classes. variables, or any other
named software entity.
https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
Warstwy
u Maj charakter umowny (mo甜e by ich wicej)
u Wa甜ny jest kierunek wystpujcych zale甜noci (do wewntrz)
u Zaproponowany podzia obejmuje
u Entities - obiekty i struktury danych definiujce reguy biznesowe
u Use Cases - logika biznesowa specyficzna dla danej aplikacji
u Interface Adapters - zbi坦r adapter坦w zapewniajcych konwersj
danych pomidzy Entities i Use Cases, a elementami zewntrznymi
np. warstw prezentacji, usugami
u Frameworks and Drivers - warstwa zo甜ona z narzdzi i framework坦w
np. baza danych
Model View Presenter (MVP)
u Wzorzec architektoniczny zwizany z warstw prezentacji
u Pochodna wzorca Model View Controller
u Dzieli aplikacj na
u Model - realizuje logik biznesow i dostp do danych
u Presenter - dziaa na poziomie modelu oraz widoku (dostarcza dane i
przygotowuje je do wywietlenia)
u View - pasywnie wywietla dane, przekierowuje informacje o
zdarzeniach do prezentera
Model View ViewModel
u Wzorzec architektoniczny zwizany z warstw prezentacji
u Pochodna wzorca Model View Controller
u Dzieli aplikacj na
u Model - realizuje logik biznesow i dostp do danych
u View - definiuje struktur, rozkad i wygld widoku
u ViewModel - udostpnia model danych (w postaci przygotowanej
specjalnie dla widoku) i realizuje logik zwizan z prezentacj
RxAndroid
u Implementacja biblioteki Reactive Extensions
u Umo甜liwia tworzenie aplikacji sterowanych zdarzeniami
u Jest to rozszerzenie koncepcji wzorca obserwatora
u obserwujemy sekwencje zdarze (kliknicie, nowe dane z serwera, zmiana statusu itd.)
u sekwencje mog by kombinowane / filtrowane / mapowane z u甜yciem operator坦w
u wszystko w programie jest wynikiem reakcji na zdarzenie (nie ma potrzeby
przechowywania stanu)
u Zalety
u Oderwanie od szczeg坦坦w niskopoziomowych takich jak wielowtkowo czy
synchronizacja stanu
u Alternatywa dla wielokrotnie zagnie甜d甜anych funkcji typu callback
u Automatyczna synchronizacja stanu modelu i widoku (bindowanie)
http://reactivex.io
Architektura Flux
u U甜ywana przez tw坦rc坦w Facebooka do budowy aplikacji webowych
u Daje si przenie na poziom Androida i innych platform
u Zao甜enia
u Jednokierunkowy przepyw danych (bardzo wa甜ne)
u Podzia aplikacji na warstwy
u View - stanowi interfejs aplikacji, tworzy Akcje w wyniku interakcji z u甜ytkownikiem
u Dispatcher - odpowiada za przetwarzanie Akcji i dostarczenie ich do magazyn坦w
u Store - zarzdza stanem (np. danego moduu aplikacji) , reaguje na Akcje, w
zale甜noci od aktualnego stanu uruchamia logik biznesow i informuje przez
eventy o jego zmianie, co z kolei powoduje odwie甜enie widoku
u Akcja - zwyky obiekt, najczciej zawiera typ i dane zwizane ze zdarzeniem
https://facebook.github.io/flux/docs/overview.html
Flux na Android (w uproszczeniu)
u View - aktywnoci i fragmenty
u Dispatcher - event bus
u Action - zwyky obiekt
u Store - dedykowana klasa / implementacja
Flux na Android - Store
u Emituje tylko jeden typ zdarzenia change
u Udostpnia API pozwalajce na pobranie stanu aplikacji (dziki
czemu mo甜liwa jest aktualizacja widoku)
u Nie jest to甜samy z repozytorium - odpowiada za podejmowanie
dziaa w odpowiedzi na zdarzenia oraz ledzenie stanu aplikacji
Flux na Android - operacje
asynchroniczne
u Dziaania asynchroniczne powinny by
inicjowane z poziomu producenta Akcji
u Po otrzymaniu rezultatu kreator przekazuje go
w ramach utworzonej akcji do Dispatchera, a
ten do Store
u W konsekwencji
u Store dziaa synchronicznie (atwa i zrozumiaa
logika, proste testowanie)
u Wszystkie Akcje s uruchamiane z jednego
miejsca (proste szukanie bd坦w)
https://github.com/lgvalle/android-flux-todo-app
Warsztat
u Budowa aplikacji w oparciu o r坦甜ne architektury
Uncle Bob: Architecture is about
intent, not frameworks
u Nie ma jednej, idealnej architektury
u Dla danej aplikacji trzeba podj indywidualn decyzj - ka甜de z
podej mo甜e mie plusy i minusy
https://github.com/ziem/android-architecture-resources
Chcesz wiedzie wicej?
u Szkolenia pozwalaj na indywidualn prac z ka甜dym uczestnikiem
u pracujemy w grupach 4-8 osobowych
u program mo甜e by dostosowany do oczekiwa grupy
u rozwizujemy i odpowiadamy na indywidualne pytania uczestnik坦w
u mamy du甜o wicej czasu :)
Szkolenia dedykowane dla Ciebie
u Interesuje Ci tematyka warsztatu?
u Zapoznaj si z programami szkole:
u Tworzenie aplikacji na platformie Android
u Zaawansowane tworzenie aplikacji na platformie Android
u In甜ynieria odwrotna i techniki zabezpieczania aplikacji na platformie Android
u Tworzenie aplikacji Android w jzyku Kotlin
Wspieraj nas

More Related Content

Architektura aplikacji android

  • 2. Prowadzcy u ukasz Andrzejewski u Trener u Programista u Kontakt u l.andrzejewski@sages.com.pl u http://pl.linkedin.com/in/lukaszandrzejewski u https://github.com/landrzejewski
  • 3. Agenda u Dlaczego architektura jest wa甜na? u Zo甜ono aplikacji mobilnych u Czysta architektura u Model View Presenter u Model View ViewModel u Flux u Is about intent, not frameworks
  • 4. Dlaczego architektura jest wa甜na? u Okrela komponenty skadowe aplikacji, ich rol oraz wzajemne relacje u Uatwia u skalowanie u testowanie u rozw坦j / utrzymanie u ponowne wykorzystanie kodu u zrozumienie dziaania aplikacji
  • 5. Zo甜ono aplikacji mobilnych u Wybrane, niebiznesowe aspekty, kt坦re nale甜y uwzgldni podczas budowania aplikacji na platformie Android u kompatybilno wsteczna u zo甜ono API u r坦甜norodno komponent坦w (cykl 甜ycia, przeznaczenie) u zarzdzanie stanem i jego synchronizacja (lokalnie, z serwerem) u wielowtkowo u oszczdzanie zasob坦w (pami, procesor, sie) u integracja z bibliotekami zewntrznymi
  • 6. Architektura na platformie Android u Nie ma oficjalnych rekomendacji / wzorc坦w u W sieci mo甜na znale添 przykady wykorzystujce r坦甜ne podejcia u Wielu programist坦w lekcewa甜y problem (na szczcie to si zmienia)
  • 7. Architektura Android - klasycznie u Podzia aplikacji na u Model - realizuje dostp do danych (baza, REST API) u Widok - prezentuje interfejs, odpowiada za interakcje z u甜ytkownikiem, czsto zawiera fragmenty logiki biznesowej u Problemy u Du甜a odpowiedzialno na poziomie warstwy widoku (aktywnoci i fragmenty staj si bardzo du甜e i trudne w utrzymaniu) u Testy jednostkowe s praktycznie niemo甜liwe (logika jest zaszyta na poziomie aktywnoci i fragment坦w) u Trudnoci z ponownym wykorzystaniem kodu u Niska jako (duplikacja, zy podzia odpowiedzialnoci, callback hell itd.) u Zdarza si, 甜e cz kodu jest przenoszona do klas pomocniczych (tzw. helper坦w), ale to nie rozwizuje wszystkich problem坦w
  • 8. Czysta architektura (wedug Uncle Bob) The Dependency Rule Nothing in an inner circle can know anything at all about something in an outer circle. In particular, the name of something declared in an outer circle must not be mentioned by the code in the an inner circle. That includes, functions, classes. variables, or any other named software entity. https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
  • 9. Warstwy u Maj charakter umowny (mo甜e by ich wicej) u Wa甜ny jest kierunek wystpujcych zale甜noci (do wewntrz) u Zaproponowany podzia obejmuje u Entities - obiekty i struktury danych definiujce reguy biznesowe u Use Cases - logika biznesowa specyficzna dla danej aplikacji u Interface Adapters - zbi坦r adapter坦w zapewniajcych konwersj danych pomidzy Entities i Use Cases, a elementami zewntrznymi np. warstw prezentacji, usugami u Frameworks and Drivers - warstwa zo甜ona z narzdzi i framework坦w np. baza danych
  • 10. Model View Presenter (MVP) u Wzorzec architektoniczny zwizany z warstw prezentacji u Pochodna wzorca Model View Controller u Dzieli aplikacj na u Model - realizuje logik biznesow i dostp do danych u Presenter - dziaa na poziomie modelu oraz widoku (dostarcza dane i przygotowuje je do wywietlenia) u View - pasywnie wywietla dane, przekierowuje informacje o zdarzeniach do prezentera
  • 11. Model View ViewModel u Wzorzec architektoniczny zwizany z warstw prezentacji u Pochodna wzorca Model View Controller u Dzieli aplikacj na u Model - realizuje logik biznesow i dostp do danych u View - definiuje struktur, rozkad i wygld widoku u ViewModel - udostpnia model danych (w postaci przygotowanej specjalnie dla widoku) i realizuje logik zwizan z prezentacj
  • 12. RxAndroid u Implementacja biblioteki Reactive Extensions u Umo甜liwia tworzenie aplikacji sterowanych zdarzeniami u Jest to rozszerzenie koncepcji wzorca obserwatora u obserwujemy sekwencje zdarze (kliknicie, nowe dane z serwera, zmiana statusu itd.) u sekwencje mog by kombinowane / filtrowane / mapowane z u甜yciem operator坦w u wszystko w programie jest wynikiem reakcji na zdarzenie (nie ma potrzeby przechowywania stanu) u Zalety u Oderwanie od szczeg坦坦w niskopoziomowych takich jak wielowtkowo czy synchronizacja stanu u Alternatywa dla wielokrotnie zagnie甜d甜anych funkcji typu callback u Automatyczna synchronizacja stanu modelu i widoku (bindowanie) http://reactivex.io
  • 13. Architektura Flux u U甜ywana przez tw坦rc坦w Facebooka do budowy aplikacji webowych u Daje si przenie na poziom Androida i innych platform u Zao甜enia u Jednokierunkowy przepyw danych (bardzo wa甜ne) u Podzia aplikacji na warstwy u View - stanowi interfejs aplikacji, tworzy Akcje w wyniku interakcji z u甜ytkownikiem u Dispatcher - odpowiada za przetwarzanie Akcji i dostarczenie ich do magazyn坦w u Store - zarzdza stanem (np. danego moduu aplikacji) , reaguje na Akcje, w zale甜noci od aktualnego stanu uruchamia logik biznesow i informuje przez eventy o jego zmianie, co z kolei powoduje odwie甜enie widoku u Akcja - zwyky obiekt, najczciej zawiera typ i dane zwizane ze zdarzeniem https://facebook.github.io/flux/docs/overview.html
  • 14. Flux na Android (w uproszczeniu) u View - aktywnoci i fragmenty u Dispatcher - event bus u Action - zwyky obiekt u Store - dedykowana klasa / implementacja
  • 15. Flux na Android - Store u Emituje tylko jeden typ zdarzenia change u Udostpnia API pozwalajce na pobranie stanu aplikacji (dziki czemu mo甜liwa jest aktualizacja widoku) u Nie jest to甜samy z repozytorium - odpowiada za podejmowanie dziaa w odpowiedzi na zdarzenia oraz ledzenie stanu aplikacji
  • 16. Flux na Android - operacje asynchroniczne u Dziaania asynchroniczne powinny by inicjowane z poziomu producenta Akcji u Po otrzymaniu rezultatu kreator przekazuje go w ramach utworzonej akcji do Dispatchera, a ten do Store u W konsekwencji u Store dziaa synchronicznie (atwa i zrozumiaa logika, proste testowanie) u Wszystkie Akcje s uruchamiane z jednego miejsca (proste szukanie bd坦w) https://github.com/lgvalle/android-flux-todo-app
  • 17. Warsztat u Budowa aplikacji w oparciu o r坦甜ne architektury
  • 18. Uncle Bob: Architecture is about intent, not frameworks u Nie ma jednej, idealnej architektury u Dla danej aplikacji trzeba podj indywidualn decyzj - ka甜de z podej mo甜e mie plusy i minusy https://github.com/ziem/android-architecture-resources
  • 19. Chcesz wiedzie wicej? u Szkolenia pozwalaj na indywidualn prac z ka甜dym uczestnikiem u pracujemy w grupach 4-8 osobowych u program mo甜e by dostosowany do oczekiwa grupy u rozwizujemy i odpowiadamy na indywidualne pytania uczestnik坦w u mamy du甜o wicej czasu :)
  • 20. Szkolenia dedykowane dla Ciebie u Interesuje Ci tematyka warsztatu? u Zapoznaj si z programami szkole: u Tworzenie aplikacji na platformie Android u Zaawansowane tworzenie aplikacji na platformie Android u In甜ynieria odwrotna i techniki zabezpieczania aplikacji na platformie Android u Tworzenie aplikacji Android w jzyku Kotlin