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

Arquitectura Android

Pablo Johnson
September 17, 2016

Arquitectura Android

Charla para el dev fest organizado por el GDG Lima Open el 17/09/2016.

Pablo Johnson

September 17, 2016
Tweet

More Decks by Pablo Johnson

Other Decks in Programming

Transcript

  1. Clean Architecture • Independiente de algún framework • Testeable •

    Independiente de la UI • Independiente de la BD
  2. Clean Architecture • Independiente de algún framework • Testeable •

    Independiente de la UI • Independiente de la BD • Independiente de cualquier agente externo
  3. Use Cases Los casos de uso son los encargados de

    orquestar el flujo de data desde y hasta las entidades y dirigen estas entidades con el fin de conseguir los objetivos del caso de uso.
  4. Adaptadores de interfaces - Presenters Los adaptadores son los encargados

    de convertir la data de la forma más conveniente para las entidades y casos de uso hacia la forma más conveniente para algún agente externo (UI, DB, etc).
  5. Capa de Presentación Aquí es donde reside la lógica de

    las vistas y animaciones Se puede implementar haciendo uso de algún patrón como MVC, MVVM o MVP (imagen).
  6. Capa de Presentación Aquí es donde reside la lógica de

    las vistas y animaciones Se puede implementar haciendo uso de algún patrón como MVC, MVVM o MVP (imagen).
  7. Capa de Dominio En esta capa se encuentran las reglas

    de negocio. Toda la lógica de negocio sucede acá.
  8. Capa de Dominio En esta capa se encuentran las reglas

    de negocio. Toda la lógica de negocio sucede acá. Esta capa puede estar enteramente en Java (o Kotlin :O )
  9. Capa de Dominio En esta capa se encuentran las reglas

    de negocio. Toda la lógica de negocio sucede acá. Esta capa puede estar enteramente en Java (o Kotlin :O )
  10. Capa de Datos Esta capa es la encargada de proveer

    toda la data necesaria para la aplicación.
  11. Capa de Datos Esta capa es la encargada de proveer

    toda la data necesaria para la aplicación. Se implementa el patrón Repository que, junto a una estrategia, escoge distintos tipos de fuente de los datos.
  12. Capa de Datos Esta capa es la encargada de proveer

    toda la data necesaria para la aplicación. Se implementa el patrón Repository que, junto a una estrategia, escoge distintos tipos de fuente de los datos.
  13. Programación Imperativa vs Programación Reactiva Imperativa int a = 3

    int b = 4 int x = a + b print(x) => 7 a=4 print(x) => ….
  14. Programación Imperativa vs Programación Reactiva Imperativa int a = 3

    int b = 4 int x = a + b print(x) => 7 a=4 print(x) => 7 !!!!
  15. Programación Imperativa vs Programación Reactiva Imperativa int a = 3

    int b = 4 int x = a + b print(x) => 7 a=4 print(x) => 7 !!!! Reactiva int a = 5 Func <int> b = { 2 * a + 1} print(b) => 11
  16. Programación Imperativa vs Programación Reactiva Imperativa int a = 3

    int b = 4 int x = a + b print(x) => 7 a=4 print(x) => 7 !!!! Reactiva int a = 5 Func <int> b = { 2 * a + 1} print(b) => 11 a = 10 print(b) => ….
  17. Programación Imperativa vs Programación Reactiva Imperativa int a = 3

    int b = 4 int x = a + b print(x) => 7 a=4 print(x) => 7 !!!! Reactiva int a = 5 Func <int> b = { 2 * a + 1} print(b) => 11 a = 10 print(b) => 21
  18. RxJava RxAndroid RxJava es una implementación para Java de ReactiveX,

    una librería para realizar programas basados en eventos asíncronos haciendo uso del patrón Observer.
  19. RxJava RxAndroid RxJava es una implementación para Java de ReactiveX,

    una librería para realizar programas basados en eventos asíncronos haciendo uso del patrón Observer. RxAndroid es una librería que adiciona a RxJava clases que hacen posible manejar los componentes reactivos en las aplicaciones Android de una manera más fácil y sin complicaciones.
  20. Beneficios • Desacoplamiento entre Observables y Subscribers hace que el

    testing y el mantenimiento sea más fácil. • Simplifica tareas asincronas.
  21. Beneficios • Desacoplamiento entre Observables y Subscribers hace que el

    testing y el mantenimiento sea más fácil. • Simplifica tareas asincronas. • Composición y transformación de la data.
  22. Beneficios • Desacoplamiento entre Observables y Subscribers hace que el

    testing y el mantenimiento sea más fácil. • Simplifica tareas asincronas. • Composición y transformación de la data. • Manejo de errores.
  23. Inyección de dependencias Es un patrón de diseño en el

    que se provee de objetos a una clase y se libera a ésta de la responsabilidad de crear o instanciarlos.
  24. Dagger 2 Dagger es un framework de inyección de dependencia

    en tiempo de compilación para Java y Android.
  25. Beneficios • Favorece el reuso de los componentes debido a

    que las dependencias pueden ser inyectadas y configuradas externamente.
  26. Beneficios • Favorece el reuso de los componentes debido a

    que las dependencias pueden ser inyectadas y configuradas externamente. • Hace posible el uso de mockear las dependencias, lo cual facilita el testing.
  27. Testing Se sugiere utilizar lo siguiente: • Para la capa

    de presentación: UI tests con Espresso 2 y Android Instrumentation. • Para la capa de dominio: jUnit y Mockito • Para la capa de datos: Roboelectric 3, jUnit y Mockito.
  28. Organización de Paquetes Por capas • Componentes no necesariamente relacionados

    dentro de un mismo paquete • Paquetes con poca cohesión y modularidad y con gran acoplamiento entre paquetes. • Editar una funcionalidad conlleva a editar archivos en distintos paquetes
  29. Organización de Paquetes Por capas • Componentes no necesariamente relacionados

    dentro de un mismo paquete. • Paquetes con poca cohesión y modularidad y con gran acoplamiento entre paquetes. • Editar una funcionalidad conlleva a editar archivos en distintos paquetes. Por funcionalidad • Se trata de colocar todos los archivos relacionados a una funcionalidad en un mismo paquete. • Paquetes con gran cohesión y modularidad y con un mínimo de acoplamiento entre paquetes.
  30. Otras fuentes importantes MVP http://antonioleiva.com/mvp-android/ https://www.linkedin.com/pulse/mvc-mvp-mvvm-architecture-patterns-shashank-gupta Dagger http://fernandocejas.com/2015/04/11/tasting-dagger-2-on-android/ https://realm.io/news/daniel-lew-dependency-injection-dagger/ Rx

    http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/ http://akarnokd.blogspot.pe/2016/04/google-agera-vs-reactivex.html Clean Architecture https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html