Eleva tu app Android: patrones de arquitectura con Jetpack Compose
Source: Dev.to
¿A qué llamamos los patrones de arquitecturas Android?
Son formas recomendadas de organizar el código de una app Android para que sea:
- Más mantenible
- Más escalable
- Más testeable
- Más fácil de entender en equipo
Con Kotlin + Jetpack Compose, Google promueve arquitecturas reactivas y unidireccionales.
Roles principales
Funciones @Composable
- Solo muestran el estado
- No contienen lógica de negocio
- Reaccionan a cambios de estado
@Composable
fun HomeScreen(state: HomeState) {
Text(text = state.title)
}
ViewModel
- Maneja el estado de la UI
- Contiene la lógica de presentación
- Sobrevive a cambios de configuración
- Expone
StateFlowoLiveData
class HomeViewModel : ViewModel() {
private val _state = MutableStateFlow(HomeState())
val state = _state.asStateFlow()
}
Reglas de negocio
- Casos de uso (UseCases) – independientes de Android
- Repositorios
- APIs (Retrofit)
- Base de datos (Room)
Arquitectura recomendada con Compose
UI (Compose)
↓
ViewModel
↓
Repository
↓
Data Source (API / DB)
Flujo de acción del usuario
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
val state by viewModel.state.collectAsState()
Button(onClick = { viewModel.loadData() }) {
Text("Cargar")
}
}
Ventajas de este enfoque
- Separación clara de responsabilidades
- Fácil testing
- Ideal para Compose
- Muy popular en apps grandes
Patrón MVI (Model‑View‑Intent)
- Intent: acción del usuario
- State: estado completo de la pantalla
- Reducer: transforma el estado
Intent → ViewModel → Reducer → New State → UI
sealed class HomeIntent {
object LoadData : HomeIntent()
}
data class HomeState(val loading: Boolean = false)
Ventajas
- Estado inmutable
- Flujo predecible
- Ideal para UIs complejas
Desventajas
- Más código y complejidad
- No es solo un patrón UI, sino una arquitectura completa
Organización por capas
- Presentation: Compose + ViewModel
- Domain: UseCases
- Data: Repository, API, DB
Características
- Las capas internas no dependen de las externas.
- UI no conoce detalles de datos.
Ventajas
- Escalable
- Muy testeable
- Ideal para proyectos grandes
MVVM + Unidirectional Data Flow + StateFlow + Jetpack Compose
- ViewModel como fuente única de estado
- Compose solo observa y renderiza
- Estado inmutable
- Eventos separados del estado
Event → ViewModel → State → Compose UI
Esto evita bugs y hace la UI predecible.
Recomendaciones por tipo de proyecto
| Tipo de app | Arquitectura recomendada |
|---|---|
| App pequeña | MVVM |
| App mediana | MVVM + Clean |
| App grande | MVI + Clean |
| UI compleja | MVI |
Conclusión
- Jetpack Compose cambia la forma de pensar la UI.
- MVVM sigue siendo la base.
- El estado es el corazón de la app.
- Un flujo unidireccional reduce errores.