Saltar a contenido

Arquitecturas de Diseño (Actualizado 2025)

Los patrones arquitectónicos son la base de cualquier aplicación moderna, escalable y mantenible. Proporcionan una forma organizada de separar responsabilidades, reducir el acoplamiento y mejorar la calidad y testabilidad del software.

En desarrollo Android (Compose + Kotlin), los más utilizados son:

  • MVC
  • MVP
  • MVVM (el estándar recomendado por Google en 2025)

Model View Controller

MVC divide la aplicación en tres responsabilidades claras:

Modelo

Representa:

  • los datos
  • la lógica empresarial
  • las reglas del negocio

Ejemplo simple:

data class Usuario(val nombre: String, val edad: Int)

Vista

Es la interfaz de usuario.
En Android moderno, una vista sería una pantalla en Compose.

@Composable
fun UsuarioView(nombre: String, edad: Int) {
    Text("Usuario: $nombre, Edad: $edad")
}

Controlador

Recibe las acciones del usuario desde la Vista, actualiza el Modelo y luego actualiza la Vista.

class UsuarioController(private val modelo: Usuario) {
    fun actualizarEdad(nuevaEdad: Int): Usuario {
        return modelo.copy(edad = nuevaEdad)
    }
}

Flujo MVC

Vista → Controlador → Modelo → Controlador → Vista

Model View Presenter

MVP surge como evolución de MVC, especialmente útil en Android clásico (XML). Está formado por:

Modelo

Datos + lógica del negocio.

Vista (totalmente pasiva)

Solo muestra datos. No tiene lógica.

interface UsuarioView {
    fun mostrarNombre(nombre: String)
    fun mostrarEdad(edad: Int)
}

Presentador (el cerebro)

Maneja eventos, actualiza el modelo y actualiza la vista.

class UsuarioPresenter(private val vista: UsuarioView) {
    fun cargarUsuario() {
        val usuario = Usuario("Ginés", 30)
        vista.mostrarNombre(usuario.nombre)
        vista.mostrarEdad(usuario.edad)
    }
}

Model View ViewModel

MVVM es el patrón oficial para Android moderno con Compose. Sus partes son:

Modelo

Fuente de datos:

data class Producto(val nombre: String, val precio: Double)

Vista (Compose reactiva)

Observa el estado del ViewModel y se redibuja automáticamente.

@Composable
fun ProductoView(uiState: ProductoUiState) {
    Text("Producto: ${uiState.nombre}")
}

ViewModel

Mantiene el estado y expone datos observables (StateFlow / LiveData).

class ProductoViewModel : ViewModel() {

    private val _uiState = MutableStateFlow(ProductoUiState())
    val uiState: StateFlow<ProductoUiState> = _uiState

    fun cargarProducto() {
        _uiState.value = ProductoUiState(
            nombre = "Portátil",
            precio = 1200.0
        )
    }
}

Flujo MVVM

ViewModel → expone datos → Vista observa → Vista renderiza
Vista → acciones usuario → ViewModel procesa

Comparativa MVC vs MVP vs MVVM

Característica MVC MVP MVVM
Vista Activa Pasiva Reactiva
Comunicación Vista → Controlador Vista ↔ Presentador Vista observa al ViewModel
Testabilidad Media Alta Muy alta
Complejidad Baja Media Media/Alta
Uso Android 2025 Obsoleto Moderado Recomendado