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

Por que me encanta MVI para Android? (AdaLovers...

Por que me encanta MVI para Android? (AdaLoversConf 2019)

Con el paso de los años, la arquitectura típica de una aplicación de Android ha cambiado mucho: desde las primeras aplicaciones donde toda la lógica estaba en la Activity, han surgido varios patrones diferentes. En este momento, MVP y MVVM son probablemente los patrones arquitectónicos más comunes pero hay muchas alternativas. Una de ellas es el uso del patrón MVI y el Unidirectional Data Flow, fuertemente inspirados en Redux. En esta charla, veremos un ejemplo de qué componentes pueden formar parte de esta arquitectura, cómo se puede utilizar y qué frameworks se pueden utilizar para facilitar su uso en nuestras aplicaciones.

Avatar for Gema Socorro Rodriguez

Gema Socorro Rodriguez

September 28, 2019
Tweet

More Decks by Gema Socorro Rodriguez

Other Decks in Programming

Transcript

  1. Las UIs son funciones Las UIs son asíncronas Las UIs

    son simétricas El usuario es una función (André Staltz, creador de Cycle.js)
  2. Unidirectional data flow Los datos solo pueden pasarse siguiendo el

    data flow y dicho data flow solo tiene un sentido
  3. Inmutabilidad - Todos los objetos que se pasan en el

    data flow son inmutables, nunca cambian. - Los componentes tienen que crear nuevos objetos para enviar datos nuevos o actualizados
  4. Side effects - Son inevitables para que cualquier app sea

    útil - El contrato establece una limitación sobre dónde pueden ocurrir: - Dentro del processor (puede necesitar comunicarse con repositorios, network, etc) - Al renderizar el state (se escribirá en la UI) - Al escuchar los intents (se leerá de la UI)
  5. Cualquier otro ejemplo de las 999.999.999.999 cosas que se pueden

    hacer con una app App de películas usando The Movie Database API
  6. MVI

  7. La testabilidad es muy alta - El ViewModel está totalmente

    desacoplado de la vista por lo que puede ser testeado directamente desde la JVM - Al utilizar observables, que son altamente testeables, los tests unitarios son muy sencillos de implementar
  8. Curva de aprendizaje - Aprendizaje de programación reactiva y funcional

    no es trivial https://github.com/Dobiasd/articles/blob/master/programming_language_learning_curves.md
  9. El problema del SingleLiveEvent - Nos obliga a enviar un

    nuevo Intent una vez que se ha mostrado el Snackbar para que se cambie un valor en el ViewState que indique que no debe mostrarse
  10. Eventos no generados por el usuario - También son Intents!

    - Cambios en la conexión de red - Cambios en la geolocalización - Modificación de permisos - Sensores - Notificaciones Push
  11. Sin soporte oficial - No tiene soporte oficial por parte

    de Google (aunque está incluida en su repositorio de blueprints de arquitecturas)
  12. Mosby Desarrollo liderado por Hannes Dorfmann (precursor de la arquitectura)

    http://hannesdorfmann.com/mosby/ https://github.com/sockeqwe/mosby
  13. Roxie Desarrollada por el equipo de desarrollo de la app

    de Weight Watchers https://github.com/ww-tech/roxie
  14. MVICore Desarrollada por el equipo de desarrollo de Badoo (con

    time-travel debugging!) https://badoo.github.io/MVICore/ https://github.com/badoo/MVICore
  15. MVI