wandres.dev
Flujo unidireccional en Kotlin

Domina MVI y Orbit
hasta nivel dios

Model-View-Intent en el mundo Android: Orbit, coroutines y Flow, estado inmutable en Compose, side effects de una sola vez y Kotlin Multiplatform.

La ruta

22 niveles, de novato a dios

Cada nivel construye sobre el anterior. Sin saltos, sin huecos.

Ontología Nivel 0 · El mapa de MVI

La visión aérea: Model-View-Intent en el mundo Kotlin/Android, Orbit, coroutines y Compose; el flujo unidireccional nativo.

Mapa mentalMVI

MVI Nivel 1 · Model-View-Intent

Model-View-Intent: la intención del usuario como entrada, un modelo inmutable como salida, y el ciclo unidireccional.

MVIintentAndroid

Orbit MVI Nivel 2 · container y side effects

Orbit (Kotlin): el container que reduce intents a estado, los side effects de una sola vez, y su ergonomía sobre coroutines.

OrbitKotlincontainer

Kotlin para MVI Nivel 3 · data y sealed classes

Las piezas del lenguaje: data classes para el estado inmutable, sealed classes/interfaces para intents y efectos, y `when` exhaustivo.

Kotlinsealeddata class

Coroutines Nivel 4 · concurrencia estructurada

Coroutines: suspend, scopes, structured concurrency, y por qué el ciclo de vida de una corrutina encaja con el de una pantalla.

coroutinessuspendscope

Flow y StateFlow Nivel 5 · streams en Kotlin

Flow: streams fríos y calientes, `StateFlow` como estado observable, `SharedFlow` para eventos, y los operadores clave.

FlowStateFlowSharedFlow

El ViewModel Nivel 6 · el hogar del estado

El ViewModel de Android: sobrevivir a cambios de configuración, `viewModelScope`, y por qué es el lugar natural del container.

ViewModelscopelifecycle

Estado en Compose Nivel 7 · recomposición

Jetpack Compose: `collectAsStateWithLifecycle`, recomposición, y renderizar la UI como función del estado.

ComposerecomposicióncollectAsState

Estabilidad y skipping Nivel 8 · rendimiento en Compose

Por qué Compose recompone de más: estabilidad de tipos, clases inmutables, y cómo el estado inmutable de MVI ayuda.

estabilidadskippinginmutable

Intents y reducers Nivel 9 · la transición

Modelar los intents del usuario y reducirlos a estado: funciones puras, validación, y el orden de las transiciones.

intentreducepuro

Side effects Nivel 10 · eventos de una sola vez

Lo que no es estado: navegar, mostrar un snackbar, vibrar; por qué mezclarlos con el estado provoca bugs al rotar la pantalla.

side effecteventouna vez

Orbit: el container Nivel 11 · la API a fondo

El container de Orbit: `intent`, `reduce`, `postSideEffect`, el `stateFlow` y el `sideEffectFlow`; su modelo de concurrencia.

containerintentreduce

Orbit: testing Nivel 12 · assertions del flujo

Testear con orbit-test: afirmar la secuencia de estados y efectos, y controlar el tiempo y las dependencias.

testingorbit-testassert

MVI a mano Nivel 13 · sin librería

Implementar MVI con solo Kotlin: un `StateFlow` privado, una función `reduce`, y un `Channel` para los efectos.

a manoStateFlowChannel

Navegación Nivel 14 · estado y destinos

Navegación en Android moderno: Navigation Compose, la navegación como efecto o como estado, y el deep linking.

navegaciónComposedeep link

Capa de datos Nivel 15 · repositorios y fuentes

Debajo del ViewModel: repositorios, fuentes locales (Room) y remotas, y exponer los datos como Flow.

repositorioRoomdatos

Inyección de dependencias Nivel 16 · Hilt y Koin

DI en Android: Hilt (compile-time) y Koin (runtime); inyectar el container y hacer testeable la capa de presentación.

HiltKoinDI

Kotlin Multiplatform Nivel 17 · compartir el estado

KMP: compartir la lógica MVI entre Android e iOS, exponerla a Swift, y qué se comparte y qué no.

KMPmultiplatformiOS

Testing de presentación Nivel 18 · la pirámide

Testear la capa de presentación: unit tests del reducer, tests del ViewModel con turbine, y tests de UI en Compose.

testingturbineUI

MVI vs MVVM vs MVP Nivel 19 · la comparación

Las arquitecturas de Android comparadas: qué añade el flujo unidireccional estricto y qué cuesta en ceremonia.

MVVMMVPcomparación

Errores comunes Nivel 20 · y cómo evitarlos

Los tropiezos típicos: estado gigante, efectos tratados como estado, fugas de scope, y recomposiciones descontroladas.

erroresfugasrefactor

Nivel Dios: síntesis Nivel 21 · MVI en la práctica

La síntesis: arquitectar una app Android completa con MVI, decidir librería o no, y el futuro del estado en Compose.

síntesisAndroidPhD
106lecciones
22niveles
0→∞de cero a dios

¿Listo para dominar MVI y Orbit?

Empieza por los fundamentos y sube nivel a nivel hasta el dominio total.

Comenzar el camino →