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

MVI para apps Android

MVI para apps Android

En esta presentación se explica qué es el patrón de presentación MVI:
- Primero, se expone cuál ha sido la evolución de los patrones de presentación en Android y cuales son los que se suelen usar actualmente.
- A continuación, se exponen los problemas que viene a resolver MVI
- Después, se describe cada uno de los componentes que tiene este patrón para seguidamente explicar cómo se utiliza la programación reactiva para construir el flow por el que se envían y reciben los eventos.
- Finalmente, se exponen los problemas que pueden surgir tras trabajar con el y una serie de ventajas que conlleva el uso de este patrón.

Gema Socorro Rodriguez

October 02, 2022
Tweet

More Decks by Gema Socorro Rodriguez

Other Decks in Technology

Transcript

  1. Cada vez que un nuevo patrón de presentación nace para

    Android (prepárense frameworks de Javascript que vamos a por ustedes)
  2. Erase una vez… Vista Presenter Tap en buscar Buscar “Sprigatito”

    WIP: Sprigatito info Lista resultados búsqueda Mostrar lista
  3. Erase una vez… Vista Presenter Tap en buscar Buscar “Sprigatito”

    WIP: Sprigatito info Lista resultados búsqueda Mostrar lista 1 Pull para refrescar Cargar sig. página WIP: Cargar sig. página Lista sig. página Mostrar lista 2
  4. MVI: de Intent a Action View Model Intent View Model

    Intent Action Mapper Processor - Desacoplar Intents/UIEvents del comando (Action) que se use en domain - Posibilidad de mapear más de un Intent a una Action
  5. ¿Qué es el SingleLiveEvent y como se come? Cambios del

    estado de la UI que tienen cierta duración
  6. SingleLiveEvent: Soluciones - Flow diferente: Usar un flow diferente/adicional para

    enviar los eventos de duración limitada - Mismo flow: Emitir un Intent para cambiar el valor que lanza el Toast una vez ha sido mostrado - Emitir dos ViewStates: uno para mostrar el Toast, otro para borrarlo del estado
  7. ¿Y si mi Viewstate crece hasta dimensiones industriales? Estrategia: Divide

    y vencerás - ¿Estoy intentando abarcar demasiadas responsabilidades con una sola vista? - Dividir el ViewState único que recibe la vista a la hora de renderizar ViewState VS Btn 1 VS Btn 2 VS Btn 3
  8. MVI es muy verbose Hay librerías que facilitan bastante el

    trabajo: - MVICore - Orbit MVI - MVFlow - MVKotlin Una vez montado, es muy cómodo añadir cada uno de los componentes para una nueva funcionalidad
  9. MVI es díficil de debuggear - Puedes poner un breakpoint

    en cada uno de los pasos y ver cómo va pasando por la cadena de operadores del stream - También es sencillo loggear en cada uno de ellos
  10. 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
  11. Fácil de testear • Es muy sencillo testear tanto con

    test unitarios como con tests de integración cada una de las partes del flujo de datos
  12. Time travel • Grabando Intents y el ViewState inicial, se

    puede reproducir lo que ha ido ocurriendo ◦ Librerías como MVIKotlin ya lo tienen integrado