Casos de Uso en Patrones NVM y Arquitecturas Limpias
Clase 17 de 20 • Curso de Patrones MVVM en Android
Resumen
La arquitectura MVVM (Modelo-Vista-Modelo de Vista) se ha consolidado como un estándar para el desarrollo de aplicaciones móviles. En este contexto, los casos de uso se presentan como componentes fundamentales que permiten interactuar con las reglas del negocio de la aplicación. Actúan como mediadores, devolviendo información al modelo de vista a partir de las APIs y bases de datos.
Importancia de los casos de uso:
- Interacción con reglas de aplicación: Regularizan cómo las entidades y las operaciones del negocio deben interactuar.
- Lógica de negocio centralizada: Almacenan todo el procesamiento de datos importante, como cálculos o transformaciones.
- Datos significativos para el usuario: El modelo de vista transforma estos resultados para presentárselos al usuario de una manera significativa.
¿Cómo implementar un caso de uso en MVVM?
En el ejemplo dado, se presenta un caso de uso denominado "Calculate Mill Nutrients Use case". Este se utiliza una vez que el usuario ha completado el onboarding de la aplicación. Este método realiza cálculos como la Tasa Metabólica Basal (BMR), que determina la cantidad mínima de energía diaria necesaria.
Pasos para implementar:
- Definición de variables: Se recopilan información como el peso, la altura y preferencias del usuario.
- Cálculo BMR: Uso de fórmulas establecidas para calcular metas calóricas personalizadas.
- Exhibición de objetivos: Los resultados se muestran en la pantalla de resumen bajo el título "Your Goal".
¿Cómo recuperar datos almacenados en la base de datos?
Para lograr la visualización de los datos necesarios, es imprescindible recuperar información específica de nuestras bases de datos. El método get foods for date
es un ejemplo claro de cómo lograr esto de manera efectiva.
¿Qué es un Flow y cuál es su papel?
Un Flow en Kotlin es un tipo de corrutina que permite manejar flujos continuos de datos. Su óptima implementación permite visualizar cambios de manera inmediata en la interfaz del usuario.
Creando un flujo con una consulta SQL
- Definición del método:
get foods for date
recibe parámetros como día, mes y año. - Uso de
Flow
: La aplicación utilizaFlow
para garantizar que los cambios se reflejen en tiempo real en la pantalla.
@Query("SELECT * FROM tracked_foodentity WHERE day = :day AND month = :month AND year = :year")
fun getFoodsForDate(day: Int, month: Int, year: Int): Flow>
¿Cómo conectar la capa de dominio con la base de datos?
En el ámbito de la capa de dominio, el repositorio actúa como intermediario para conectar las operaciones del DAO y la lógica de negocio que implementamos en casos de uso más comprensibles y testeables.
- Implementación del repositorio: Se utiliza un método
get foods for date
que toma como parámetro unLocalDate
. - Funcionalidad del repositorio: Almacena y organiza métodos que interactúan con los datos del DAO.
¿Por qué es recomendable implementar casos de uso en clases separadas?
La organización y clara definición de casos de uso en arquitecturas limpias permite:
- Pruebas eficientes: Facilita testear cada componente individualmente.
- Mantenibilidad y escalabilidad: Asegura que el código pueda ajustarse y expandirse de manera eficaz.
- Separación de responsabilidades: Cada clase tiene un rol claro, mejorando la claridad del código.
Explorando los Flows en profundidad
Los Flows en Kotlin ofrecen un control afinado sobre cómo los datos cambian y fluyen a lo largo de toda una aplicación.
Tipos:
- Hot Flows: Transmiten datos continuamente.
- Cold Flows: Necesitan ser recolectados activamente.
Procedimiento para crear un botón de interacción
Finalmente, un componente crucial en la interacción del usuario es el botón Add
. Este botón, implementado como un componente Composable, simplifica la navegación a nuevas pantallas de búsqueda.
@Composable
fun AddButton(modifier: Modifier, text: String, onClick: () -> Unit) {
Button(
onClick = onClick,
modifier = modifier
) {
Text(text)
}
}
La arquitectura limpia y bien estructurada en MVVM no solo mejora la eficiencia y rendimiento de la aplicación, sino que también simplifica la adición de nuevos features y funcionalidades. ¡Sigue explorando y expandiendo tus habilidades de desarrollador!