Slide 1

Slide 1 text

Android Architecture Android Architecture y patrones de diseño Dinorah Tovar 
 medium.com/@dinorahto

Slide 2

Slide 2 text

Kotlin Kotlin y Google Desde backend hasta aplicaciones móviles 
 Desde Android a iOS

Slide 3

Slide 3 text

Android Architecture Arq.

Slide 4

Slide 4 text

Android Architecture

Slide 5

Slide 5 text

Android Architecture Clean Architecture Modular Inyección de dependencias Arquitectura escalable Capaz de adaptarse División de prioridades Responsabilidad única HIGH LEVEL GUIDELINE

Slide 6

Slide 6 text

Android Architecture Clean Architecture • Patrones de diseño • MVVM, MVP, MVC, MVI • Use cases • Bases de datos • Crypto objects • Shared preferences • Servicios, web sockets, protocolos Presentation Layer Domain Layer Data Layer

Slide 7

Slide 7 text

Android Architecture Presentation
 Layer Activity Fragment Dialog ViewModel Intent Presenter Interface XML Domain
 Layer Use Case Data
 Layer Repository Data Source Local Storage Use Case Use Case Remote Storage Data Source

Slide 8

Slide 8 text

Android Architecture Presentation
 Layer Domain
 Layer Data
 Layer ¿Modular? ¿Dagger o Koin?

Slide 9

Slide 9 text

Android Architecture ¿Modular? ¿Dagger o Koin?

Slide 10

Slide 10 text

Presentation Layer Patrones de Diseño U Model-View-ViewModel Model-View-Presenter Model-View-Intent

Slide 11

Slide 11 text

Presentation Layer Presentation
 Layer

Slide 12

Slide 12 text

Model View Presenter View: Activity o Fragment Despliega información Manejo de los Listener Presenter: Lógica Conexión al model Interface: Los resultados llegan a la vista por medio de una interfaz

Slide 13

Slide 13 text

Model View Presenter interface

Slide 14

Slide 14 text

Model View Presenter

Slide 15

Slide 15 text

Model View Intent View: Activity o Fragment Despliega información Manejo de los Listener Presenter: Lógica Interface: Con Observables

Slide 16

Slide 16 text

Model View Intent Interface: Con Observables

Slide 17

Slide 17 text

Model View ViewModel View: Activity o Fragment Despliega información ViewModel inicia con una instancia de la Activity ViewModel: Lógica Conexión al model Independiente de Activity No mandar Activity o Contexto MEMORY LEAK!

Slide 18

Slide 18 text

Model View ViewModel Contexto MEMORY LEAK

Slide 19

Slide 19 text

Model View ViewModel

Slide 20

Slide 20 text

ViewModel ViewModel se encarga de almacenar y manejar la información relacionada con el UI tomando en cuenta el ciclo de vida de la aplicación. Esto incluye la rotación de pantalla

Slide 21

Slide 21 text

ViewModel Los ViewModel exponen la data Sobreviven a los cambios de rotación Pueden hacer el dispose de Observables y el cancel de las Coroutines

Slide 22

Slide 22 text

LiveData LiveData expone los eventos y cambios después de una acción. Puede extenderse, por ejemplo, para ver los cambios en la red del teléfono

Slide 23

Slide 23 text

Domain Layer Domain Layer Use Case Use Case Use Case Reglas + Reutilizable + Escalable

Slide 24

Slide 24 text

Presentation Layer Data Layer Data Model con división de responsabilidades
 Local Data y Remote Data

Slide 25

Slide 25 text

Data Layer Data Layer Repository Data Source Local Storage Remote Storage Data Source Bases de datos Crypto objects Shared Preferences Servicios, web sockets, protocolos

Slide 26

Slide 26 text

Local Storage Local Storage Objetivo: Guarda información del usuario Se puede escribir y obtener 
 Herramientas: SharedPreferences Bases de Datos Crypto Objects

Slide 27

Slide 27 text

Local Storage Realm SQLite Room ❌ Seguridad ❌ Las bases de datos pueden corromperse después de una transición ❌ Complejo ✅ Lifecycle aware ✅ Fácil encriptación ✅ LiveData support ✅ Queries complejos de manera simple ❌ Migraciones complejas ✅ Queries simples ✅ Fácil encriptación ✅ Rápido ❌ Migraciones complejas Crypto Objects

Slide 28

Slide 28 text

Local Storage Realm

Slide 29

Slide 29 text

Local Storage Realm

Slide 30

Slide 30 text

Local Storage Room

Slide 31

Slide 31 text

Local Storage Room

Slide 32

Slide 32 text

Remote Storage Remote Storage Objetivo: Obtener información desde servicios, web sockets, etc. 
 Herramientas: Retrofit OkHttpClient RxJava Coroutines Don’t block keep moving

Slide 33

Slide 33 text

Data Layer Coroutines RxJava ✅ Streams de Data ✅ Tiene Single, Flatmap, Zip, ZipWith, Observables ❌ Dispose todos los observables ❌ Callback anidado complica las cosas ✅ Streams de Data ✅ Con suspended functions puedes hacer Flatmap ✅ Fácil de leer ✅ Cancel coroutines usando ViewModel ❌ Nuevo

Slide 34

Slide 34 text

We get our result asynchronous and can be:
 
 Success Error We show the result to the main thread
 
 withContext{ } We call CMS using Retrofit:
 
 await() We create a coroutine Coroutines

Slide 35

Slide 35 text

Coroutines Presentation
 Layer Domain 
 Layer Data 
 Layer Inicializar la Coroutine Cancelar la Coroutine Suspend Function Suspend Function Retrofit Call

Slide 36

Slide 36 text

Coroutines Retrofit Call

Slide 37

Slide 37 text

Coroutines Coroutines

Slide 38

Slide 38 text

Coroutines Coroutines

Slide 39

Slide 39 text

Coroutines RemoteDataSource

Slide 40

Slide 40 text

Coroutines Repository

Slide 41

Slide 41 text

Cancelando Coroutines con ViewModel viewModelJob es un Job para todas las coroutines inicializadas en este ViewModel. uiScope es un Scope para todas las coroutines lanzadas en el ViewModel.

Slide 42

Slide 42 text

Cancelando Coroutines con ViewModel viewModelScope es una extensión que hace todo el trabajo que estábamos haciendo anteriormente.

Slide 43

Slide 43 text

Ejemplo: github.com/dinorahto/Clean-MVVM-Koin Android Architecture + Kotlin Gracias Dinorah Tovar 
 medium.com/@dinorahto