Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Architecture

Android Architecture

Android Architecture presented at Women Who Code 2019
Making a happy app the happy way

Found this presentation at Software Guru: https://sg.com.mx/buzz/ponencias/women-who-code-cdmx/android-architecture-y-patrones-de-diseno

Dinorah Tovar

May 16, 2019
Tweet

More Decks by Dinorah Tovar

Other Decks in Technology

Transcript

  1. Android Architecture Clean Architecture Modular Inyección de dependencias Arquitectura escalable

    Capaz de adaptarse División de prioridades Responsabilidad única HIGH LEVEL GUIDELINE
  2. 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
  3. 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
  4. 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
  5. Model View Intent View: Activity o Fragment Despliega información Manejo

    de los Listener Presenter: Lógica Interface: Con Observables
  6. 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!
  7. 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
  8. 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
  9. 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
  10. Domain Layer Domain Layer Use Case Use Case Use Case

    Reglas + Reutilizable + Escalable
  11. Data Layer Data Layer Repository Data Source Local Storage Remote

    Storage Data Source Bases de datos Crypto objects Shared Preferences Servicios, web sockets, protocolos
  12. Local Storage Local Storage Objetivo: Guarda información del usuario Se

    puede escribir y obtener 
 Herramientas: SharedPreferences Bases de Datos Crypto Objects
  13. 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
  14. Remote Storage Remote Storage Objetivo: Obtener información desde servicios, web

    sockets, etc. 
 Herramientas: Retrofit OkHttpClient RxJava Coroutines Don’t block keep moving
  15. 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
  16. We get our result asynchronous and can be:
 
 Success<T>

    Error<T> We show the result to the main thread
 
 withContext{ } We call CMS using Retrofit:
 
 await() We create a coroutine Coroutines
  17. Coroutines Presentation
 Layer Domain 
 Layer Data 
 Layer Inicializar

    la Coroutine Cancelar la Coroutine Suspend Function Suspend Function Retrofit Call
  18. 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.
  19. Cancelando Coroutines con ViewModel viewModelScope es una extensión que hace

    todo el trabajo que estábamos haciendo anteriormente.