SlideShare a Scribd company logo
1 of 21
Download to read offline
Architektura
aplikacji Android
ŁUKASZ ANDRZEJEWSKI
Prowadzący
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 Złoż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 Określa komponenty składowe aplikacji, ich rolę oraz wzajemne
relacje
u Ułatwia
u skalowanie
u testowanie
u rozwój / utrzymanie
u ponowne wykorzystanie kodu
u zrozumienie działania aplikacji
Złożoność aplikacji mobilnych
u Wybrane, niebiznesowe aspekty, które należy uwzględnić podczas
budowania aplikacji na platformie Android
u kompatybilność wsteczna
u złożoność API
u różnorodność komponentów (cykl życia, przeznaczenie)
u zarządzanie stanem i jego synchronizacja (lokalnie, z serwerem)
u wielowątkowość
u oszczędzanie zasobów (pamięć, procesor, sieć)
u integracja z bibliotekami zewnętrznymi
…
Architektura na platformie Android
u Nie ma oficjalnych rekomendacji / wzorców
u W sieci można znaleźć przykłady wykorzystujące różne podejścia
u Wielu programistów lekceważy problem (na szczęście to się zmienia)
Architektura Android - „klasycznie”
u Podział aplikacji na
u Model - realizuje dostęp do danych (baza, REST API)
u Widok - prezentuje interfejs, odpowiada za interakcje z użytkownikiem,
często zawiera fragmenty logiki biznesowej
u Problemy
u Duża odpowiedzialność na poziomie warstwy widoku (aktywności i
fragmenty stają się bardzo duże i trudne w utrzymaniu)
u Testy jednostkowe są praktycznie niemożliwe (logika jest zaszyta na poziomie
aktywności i fragmentów)
u Trudności z ponownym wykorzystaniem kodu
u Niska jakość (duplikacja, zły podział odpowiedzialności, callback hell itd.)
u Zdarza się, że część kodu jest przenoszona do klas pomocniczych
(tzw. helperów), ale to nie rozwiązuje wszystkich problemów
Czysta architektura
(według 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 więcej)
u Ważny jest kierunek występujących zależności (do wewnątrz)
u Zaproponowany podział obejmuje
u Entities - obiekty i struktury danych definiujące reguły biznesowe
u Use Cases - logika biznesowa specyficzna dla danej aplikacji
u Interface Adapters - zbiór adapterów zapewniających konwersję
danych pomiędzy Entities i Use Cases, a elementami zewnętrznymi
np. warstwą prezentacji, usługami
u Frameworks and Drivers - warstwa złożona z narzędzi i frameworków
np. baza danych
Model View Presenter (MVP)
u Wzorzec architektoniczny związany z warstwą prezentacji
u Pochodna wzorca Model View Controller
u Dzieli aplikację na
u Model - realizuje logikę biznesową i dostęp do danych
u Presenter - działa na poziomie modelu oraz widoku (dostarcza dane i
przygotowuje je do wyświetlenia)
u View - pasywnie wyświetla dane, przekierowuje informacje o
zdarzeniach do prezentera
Model View ViewModel
u Wzorzec architektoniczny związany z warstwą prezentacji
u Pochodna wzorca Model View Controller
u Dzieli aplikację na
u Model - realizuje logikę biznesową i dostęp do danych
u View - definiuje strukturę, rozkład i wygląd widoku
u ViewModel - udostępnia model danych (w postaci przygotowanej
specjalnie dla widoku) i realizuje logikę związaną 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ń (kliknięcie, 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 wielowątkowość 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 Facebook’a do budowy aplikacji webowych
u Daje się przenieść na poziom Androida i innych platform
u Założenia
u Jednokierunkowy przepływ 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 - zarządza stanem (np. danego modułu aplikacji) , reaguje na Akcje, w
zależności od aktualnego stanu uruchamia logikę biznesową i informuje przez
eventy o jego zmianie, co z kolei powoduje odświeżenie widoku
u Akcja - zwykły obiekt, najczęściej zawiera typ i dane związane ze zdarzeniem
https://facebook.github.io/flux/docs/overview.html
Flux na Android (w uproszczeniu)
u View - aktywności i fragmenty
u Dispatcher - event bus
u Action - zwykły obiekt
u Store - dedykowana klasa / implementacja
Flux na Android - Store
u Emituje tylko jeden typ zdarzenia change
u Udostępnia API pozwalające na pobranie stanu aplikacji (dzięki
czemu możliwa jest aktualizacja widoku)
u Nie jest tożsamy z repozytorium - odpowiada za podejmowanie
działań w odpowiedzi na zdarzenia oraz śledzenie stanu aplikacji
Flux na Android - operacje
asynchroniczne
u Działania 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 działa synchronicznie (łatwa i zrozumiała
logika, proste testowanie)
u Wszystkie Akcje są uruchamiane z jednego
miejsca (proste szukanie błędó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ć więcej?
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 rozwiązujemy i odpowiadamy na indywidualne pytania uczestników
u mamy dużo więcej 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 języku Kotlin
Wspierają nas

More Related Content

Viewers also liked

Wprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataWprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataSages
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startSages
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreSages
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Sages
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSages
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemSages
 
From sql server to mongo db
From sql server to mongo dbFrom sql server to mongo db
From sql server to mongo dbRyan Hoffman
 
Владимир Тагаков. Dagger2: dependency injection in Android
Владимир Тагаков. Dagger2: dependency injection in AndroidВладимир Тагаков. Dagger2: dependency injection in Android
Владимир Тагаков. Dagger2: dependency injection in AndroidMail.ru Group
 
Am I too old to do proper programming? - Przemek Hocke
Am I too old to do proper programming? - Przemek HockeAm I too old to do proper programming? - Przemek Hocke
Am I too old to do proper programming? - Przemek HockeWebMuses
 
HelloMobile! Android
HelloMobile! AndroidHelloMobile! Android
HelloMobile! AndroidWebMuses
 
Zapowiedź raportu - Stan Androida w Polsce 2015
Zapowiedź raportu - Stan Androida w Polsce 2015Zapowiedź raportu - Stan Androida w Polsce 2015
Zapowiedź raportu - Stan Androida w Polsce 2015Piotr Biegun
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseSages
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJSSages
 
Środowisko android studio - podstawy
Środowisko android studio - podstawyŚrodowisko android studio - podstawy
Środowisko android studio - podstawyPROSKAR
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetSages
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkSages
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkitSages
 

Viewers also liked (20)

Wprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataWprowadzenie do technologii Big Data
Wprowadzenie do technologii Big Data
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki start
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
 
Interfejsy
InterfejsyInterfejsy
Interfejsy
 
Uvod u react
Uvod u reactUvod u react
Uvod u react
 
From sql server to mongo db
From sql server to mongo dbFrom sql server to mongo db
From sql server to mongo db
 
Владимир Тагаков. Dagger2: dependency injection in Android
Владимир Тагаков. Dagger2: dependency injection in AndroidВладимир Тагаков. Dagger2: dependency injection in Android
Владимир Тагаков. Dagger2: dependency injection in Android
 
Am I too old to do proper programming? - Przemek Hocke
Am I too old to do proper programming? - Przemek HockeAm I too old to do proper programming? - Przemek Hocke
Am I too old to do proper programming? - Przemek Hocke
 
HelloMobile! Android
HelloMobile! AndroidHelloMobile! Android
HelloMobile! Android
 
Zapowiedź raportu - Stan Androida w Polsce 2015
Zapowiedź raportu - Stan Androida w Polsce 2015Zapowiedź raportu - Stan Androida w Polsce 2015
Zapowiedź raportu - Stan Androida w Polsce 2015
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Środowisko android studio - podstawy
Środowisko android studio - podstawyŚrodowisko android studio - podstawy
Środowisko android studio - podstawy
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache Spark
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkit
 
6 porad - jak projektować na system Android i iOS
6 porad - jak projektować na system Android i iOS6 porad - jak projektować na system Android i iOS
6 porad - jak projektować na system Android i iOS
 

Similar to Architektura aplikacji android

Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?tkryskiewicz
 
Domain Driven Development
Domain Driven DevelopmentDomain Driven Development
Domain Driven DevelopmentKonrad Russa
 
Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureSages
 
Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)Bartlomiej Zass
 
Robotlegs basics - PL
Robotlegs basics - PLRobotlegs basics - PL
Robotlegs basics - PLukaszdev
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVCQuick-Solution
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymDariusz Jagieło
 
Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005Tomasz Cieplak
 
My littlemvc 2008 official
My littlemvc 2008 officialMy littlemvc 2008 official
My littlemvc 2008 officialskowronkow
 
Exam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows ApplicationExam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows ApplicationMaciej Zbrzezny
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiGrzegorz Bartman
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztatyintive
 
Mts 2013 tomasz kopacz - wydajność aplikacji dla windows 8 - jak ją mierzyć...
Mts 2013   tomasz kopacz - wydajność aplikacji dla windows 8 - jak ją mierzyć...Mts 2013   tomasz kopacz - wydajność aplikacji dla windows 8 - jak ją mierzyć...
Mts 2013 tomasz kopacz - wydajność aplikacji dla windows 8 - jak ją mierzyć...Tomasz Kopacz
 
Single Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu RESTSingle Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu REST3camp
 
Encje w drupalu - DrupalCamp Wroclaw 2015
Encje w drupalu - DrupalCamp Wroclaw 2015Encje w drupalu - DrupalCamp Wroclaw 2015
Encje w drupalu - DrupalCamp Wroclaw 2015Grzegorz Bartman
 
Modele i metodyki wdrażania i zarządzania projektami eai
Modele i metodyki wdrażania i zarządzania projektami eaiModele i metodyki wdrażania i zarządzania projektami eai
Modele i metodyki wdrażania i zarządzania projektami eaiJaroslaw Zelinski
 

Similar to Architektura aplikacji android (20)

Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
 
Domain Driven Development
Domain Driven DevelopmentDomain Driven Development
Domain Driven Development
 
Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze Azure
 
Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)
 
Robotlegs basics - PL
Robotlegs basics - PLRobotlegs basics - PL
Robotlegs basics - PL
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
 
university day 1
university day 1university day 1
university day 1
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastym
 
Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005
 
My littlemvc 2008 official
My littlemvc 2008 officialMy littlemvc 2008 official
My littlemvc 2008 official
 
Exam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows ApplicationExam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows Application
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
 
Mts 2013 tomasz kopacz - wydajność aplikacji dla windows 8 - jak ją mierzyć...
Mts 2013   tomasz kopacz - wydajność aplikacji dla windows 8 - jak ją mierzyć...Mts 2013   tomasz kopacz - wydajność aplikacji dla windows 8 - jak ją mierzyć...
Mts 2013 tomasz kopacz - wydajność aplikacji dla windows 8 - jak ją mierzyć...
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Single Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu RESTSingle Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu REST
 
Encje w drupalu - DrupalCamp Wroclaw 2015
Encje w drupalu - DrupalCamp Wroclaw 2015Encje w drupalu - DrupalCamp Wroclaw 2015
Encje w drupalu - DrupalCamp Wroclaw 2015
 
Modele i metodyki wdrażania i zarządzania projektami eai
Modele i metodyki wdrażania i zarządzania projektami eaiModele i metodyki wdrażania i zarządzania projektami eai
Modele i metodyki wdrażania i zarządzania projektami eai
 

More from Sages

Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawySages
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?Sages
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki startSages
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstępSages
 

More from Sages (6)

Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki start
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstęp
 

Architektura aplikacji android

  • 2. Prowadzący 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 Złoż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 Określa komponenty składowe aplikacji, ich rolę oraz wzajemne relacje u Ułatwia u skalowanie u testowanie u rozwój / utrzymanie u ponowne wykorzystanie kodu u zrozumienie działania aplikacji
  • 5. Złożoność aplikacji mobilnych u Wybrane, niebiznesowe aspekty, które należy uwzględnić podczas budowania aplikacji na platformie Android u kompatybilność wsteczna u złożoność API u różnorodność komponentów (cykl życia, przeznaczenie) u zarządzanie stanem i jego synchronizacja (lokalnie, z serwerem) u wielowątkowość u oszczędzanie zasobów (pamięć, procesor, sieć) u integracja z bibliotekami zewnętrznymi …
  • 6. Architektura na platformie Android u Nie ma oficjalnych rekomendacji / wzorców u W sieci można znaleźć przykłady wykorzystujące różne podejścia u Wielu programistów lekceważy problem (na szczęście to się zmienia)
  • 7. Architektura Android - „klasycznie” u Podział aplikacji na u Model - realizuje dostęp do danych (baza, REST API) u Widok - prezentuje interfejs, odpowiada za interakcje z użytkownikiem, często zawiera fragmenty logiki biznesowej u Problemy u Duża odpowiedzialność na poziomie warstwy widoku (aktywności i fragmenty stają się bardzo duże i trudne w utrzymaniu) u Testy jednostkowe są praktycznie niemożliwe (logika jest zaszyta na poziomie aktywności i fragmentów) u Trudności z ponownym wykorzystaniem kodu u Niska jakość (duplikacja, zły podział odpowiedzialności, callback hell itd.) u Zdarza się, że część kodu jest przenoszona do klas pomocniczych (tzw. helperów), ale to nie rozwiązuje wszystkich problemów
  • 8. Czysta architektura (według 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 więcej) u Ważny jest kierunek występujących zależności (do wewnątrz) u Zaproponowany podział obejmuje u Entities - obiekty i struktury danych definiujące reguły biznesowe u Use Cases - logika biznesowa specyficzna dla danej aplikacji u Interface Adapters - zbiór adapterów zapewniających konwersję danych pomiędzy Entities i Use Cases, a elementami zewnętrznymi np. warstwą prezentacji, usługami u Frameworks and Drivers - warstwa złożona z narzędzi i frameworków np. baza danych
  • 10. Model View Presenter (MVP) u Wzorzec architektoniczny związany z warstwą prezentacji u Pochodna wzorca Model View Controller u Dzieli aplikację na u Model - realizuje logikę biznesową i dostęp do danych u Presenter - działa na poziomie modelu oraz widoku (dostarcza dane i przygotowuje je do wyświetlenia) u View - pasywnie wyświetla dane, przekierowuje informacje o zdarzeniach do prezentera
  • 11. Model View ViewModel u Wzorzec architektoniczny związany z warstwą prezentacji u Pochodna wzorca Model View Controller u Dzieli aplikację na u Model - realizuje logikę biznesową i dostęp do danych u View - definiuje strukturę, rozkład i wygląd widoku u ViewModel - udostępnia model danych (w postaci przygotowanej specjalnie dla widoku) i realizuje logikę związaną 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ń (kliknięcie, 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 wielowątkowość 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 Facebook’a do budowy aplikacji webowych u Daje się przenieść na poziom Androida i innych platform u Założenia u Jednokierunkowy przepływ 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 - zarządza stanem (np. danego modułu aplikacji) , reaguje na Akcje, w zależności od aktualnego stanu uruchamia logikę biznesową i informuje przez eventy o jego zmianie, co z kolei powoduje odświeżenie widoku u Akcja - zwykły obiekt, najczęściej zawiera typ i dane związane ze zdarzeniem https://facebook.github.io/flux/docs/overview.html
  • 14. Flux na Android (w uproszczeniu) u View - aktywności i fragmenty u Dispatcher - event bus u Action - zwykły obiekt u Store - dedykowana klasa / implementacja
  • 15. Flux na Android - Store u Emituje tylko jeden typ zdarzenia change u Udostępnia API pozwalające na pobranie stanu aplikacji (dzięki czemu możliwa jest aktualizacja widoku) u Nie jest tożsamy z repozytorium - odpowiada za podejmowanie działań w odpowiedzi na zdarzenia oraz śledzenie stanu aplikacji
  • 16. Flux na Android - operacje asynchroniczne u Działania 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 działa synchronicznie (łatwa i zrozumiała logika, proste testowanie) u Wszystkie Akcje są uruchamiane z jednego miejsca (proste szukanie błędó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ć więcej? 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 rozwiązujemy i odpowiadamy na indywidualne pytania uczestników u mamy dużo więcej 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 języku Kotlin