Persistencia de Datos en Android con Room y NVM

Clase 15 de 20Curso de Patrones MVVM en Android

Resumen

Room es una biblioteca de bases de datos de Jetpack que proporciona una capa de abstracción sobre SQLite. Esto permite a los desarrolladores persistir datos de manera eficiente y escalable mientras se mantiene una arquitectura limpia.

¿Por qué es Room imprescindible para persistir datos en Android?

  • Abstracción de SQLite: Room ofrece una capa superior sobre SQLite, simplificando su uso en aplicaciones Android.
  • Compatibilidad con MVVM: facilita la integración con el patrón MVVM para una arquitectura más robusta.
  • Eficiencia: Permite consultas más seguras y un código más limpio al trabajar con bases de datos.

¿Cómo configurar una entidad en Room?

Para comenzar, se crea un paquete dentro de tu estructura de datos llamado local. Dentro de este paquete, se debe crear otro llamado entity, y ahí es donde se define una clase para la entidad de la base de datos.

@Entity
data class TracketFoodEntity(
    val name: String,
    val carbs: Int,
    val protein: Int,
    val fat: Int,
    val imageUrl: String?,
    val amount: Int,
    val dayOfMonth: Int,
    val month: Int,
    val year: Int,
    val calories: Int,
    @PrimaryKey val id: Int? = null
)

¿Cómo manejar el acceso a datos con DAO?

DAO (Data Access Object) es una parte esencial de Room que permite definir métodos de acceso a la base de datos de forma abstracta.

@Dao
interface TrackerDAO {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(trackedFood: TracketFoodEntity)
}
  • FUNCIONES ASÍNCRONAS: Las operaciones con bases de datos suelen requerir esperar su ejecución, por lo que se marcan como suspend.

¿Cómo crear y configurar la base de datos en Room?

La base de datos en Room se crea extendiendo de RoomDatabase y definiendo las entidades y DAOs que va a manejar.

@Database(entities = [TracketFoodEntity::class], version = 1)
abstract class TrackerDatabase : RoomDatabase() {
    abstract val trackerDAO: TrackerDAO
}
  • VERSIÓN: Es fundamental definir la versión para gestionar correctamente las actualizaciones de la base de datos.

¿Cómo mapear datos entre capas?

Para mantener la eficiencia al manejar los datos desde la capa de dominio y la base de datos, se utiliza un mapper.

fun TracketFood.toTracketFoodEntity(): TracketFoodEntity {
    return TracketFoodEntity(
        name = this.name,
        carbs = this.carbs,
        protein = this.protein,
        fat = this.fat,
        imageUrl = this.imageUrl,
        amount = this.amount,
        dayOfMonth = this.date.dayOfMonth,
        month = this.date.monthValue,
        year = this.date.year,
        calories = this.calories
    )
}

Consejos prácticos y recomendaciones

  • SEPARACIÓN DE RESPONSABILIDADES: mantén separadas las capas de repositorio y DAO para un acceso limpio y organizado a los datos.
  • FUNCIONES ASÍNCRONAS: utiliza suspensiones y corrutinas para manejar operaciones prolongadas de manera eficiente.
  • VALIDACIONES DE NULABILIDAD: asegúrate de que los datos que pueden no estar presentes en tu base sean gestionados correctamente para evitar errores.

¿Por qué Room se destaca entre otras bases de datos móviles?

Además de Room, otras bases de datos populares en el entorno móvil incluyen SQLite, Realtime Database de Firebase y Realm. Room se destaca por:

  • Consultas seguras: permite crear y ejecutar consultas SQL de manera segura.
  • Compatibilidad con frameworks de observación como LiveData y Flows, lo que facilita la gestión de datos en tiempo real dentro de las aplicaciones.

Mantente motivado y sigue expandiendo tus conocimientos en Android y Room. Recuerda que dominar esta poderosa herramienta no solo mejorará tus aplicaciones, sino que también te dará un enfoque más estructurado y eficaz al desarrollo móvil. ¡Adelante, sigue aprendiendo!