📱 ¿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.
🧩 Componentes clave con Jetpack Compose
Antes de los patrones, es importante entender los roles principales:
1. UI (Compose)
- 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)
}
2. 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()
}
3. Domain / Business Logic
- Reglas de negocio
- Casos de uso (UseCases)
- Independiente de Android
4. Data Layer
- Repositorios
- APIs (Retrofit)
- Base de datos (Room)
🏗️ Patrones de arquitectura más usados
🔹 1. MVVM (Model–View–ViewModel) ⭐⭐⭐⭐⭐
El más usado y recomendado con Compose
Estructura
UI (Compose)
↓
ViewModel
↓
Repository
↓
Data Source (API / DB)
Flujo de datos (unidireccional)
User Action → ViewModel → State → UI
Ejemplo simple
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
val state by viewModel.state.collectAsState()
Button(onClick = { viewModel.loadData() }) {
Text("Cargar")
}
}
Ventajas:
- Separación clara de responsabilidades
- Fácil testing
- Ideal para Compose
🔹 2. MVI (Model–View–Intent) ⭐⭐⭐⭐
Muy popular en apps grandes
Conceptos clave
- Intent: acción del usuario
- State: estado completo de la pantalla
- Reducer: transforma el estado
Flujo
Intent → ViewModel → Reducer → New State → UI
Ejemplo conceptual
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
🔹 3. Clean Architecture con Compose ⭐⭐⭐⭐⭐
No es un patrón UI, sino una arquitectura completa
Capas
Presentation (Compose + ViewModel)
Domain (UseCases)
Data (Repository, API, DB)
Reglas
- Las capas internas no dependen de las externas
- UI no conoce detalles de datos
Ventajas:
- Escalable
- Muy testeable
- Ideal para proyectos grandes
🧠 Recomendación oficial de Google
- MVVM + Unidirectional Data Flow + StateFlow + Jetpack Compose
- ViewModel como fuente única de estado
- Compose solo observa y renderiza
- Estado inmutable
- Eventos separados del estado
🔁 Unidirectional Data Flow (UDF)
Event → ViewModel → State → Compose UI
Esto evita bugs y hace la UI predecible.
📌 ¿Cuál usar?
| Proyecto | Recomendación |
|---|---|
| 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
- Flujo unidireccional = menos errores
Top comments (0)