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

C6e1201f51c1ff186edba69f98476f15?s=128

Dinorah Tovar

May 16, 2019
Tweet

Transcript

  1. Android Architecture Android Architecture y patrones de diseño Dinorah Tovar

    
 medium.com/@dinorahto
  2. Kotlin Kotlin y Google Desde backend hasta aplicaciones móviles 


    Desde Android a iOS
  3. Android Architecture Arq.

  4. Android Architecture

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

    Capaz de adaptarse División de prioridades Responsabilidad única HIGH LEVEL GUIDELINE
  6. 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
  7. 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
  8. Android Architecture Presentation
 Layer Domain
 Layer Data
 Layer ¿Modular? ¿Dagger

    o Koin?
  9. Android Architecture ¿Modular? ¿Dagger o Koin?

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

  11. Presentation Layer Presentation
 Layer

  12. 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
  13. Model View Presenter interface

  14. Model View Presenter

  15. Model View Intent View: Activity o Fragment Despliega información Manejo

    de los Listener Presenter: Lógica Interface: Con Observables
  16. Model View Intent Interface: Con Observables

  17. 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!
  18. Model View ViewModel Contexto MEMORY LEAK

  19. Model View ViewModel

  20. 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
  21. 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
  22. 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
  23. Domain Layer Domain Layer Use Case Use Case Use Case

    Reglas + Reutilizable + Escalable
  24. Presentation Layer Data Layer Data Model con división de responsabilidades


    Local Data y Remote Data
  25. Data Layer Data Layer Repository Data Source Local Storage Remote

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

    puede escribir y obtener 
 Herramientas: SharedPreferences Bases de Datos Crypto Objects
  27. 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
  28. Local Storage Realm

  29. Local Storage Realm

  30. Local Storage Room

  31. Local Storage Room

  32. Remote Storage Remote Storage Objetivo: Obtener información desde servicios, web

    sockets, etc. 
 Herramientas: Retrofit OkHttpClient RxJava Coroutines Don’t block keep moving
  33. 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
  34. 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
  35. Coroutines Presentation
 Layer Domain 
 Layer Data 
 Layer Inicializar

    la Coroutine Cancelar la Coroutine Suspend Function Suspend Function Retrofit Call
  36. Coroutines Retrofit Call

  37. Coroutines Coroutines

  38. Coroutines Coroutines

  39. Coroutines RemoteDataSource

  40. Coroutines Repository

  41. 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.
  42. Cancelando Coroutines con ViewModel viewModelScope es una extensión que hace

    todo el trabajo que estábamos haciendo anteriormente.
  43. Ejemplo: github.com/dinorahto/Clean-MVVM-Koin Android Architecture + Kotlin Gracias Dinorah Tovar 


    medium.com/@dinorahto