Comparación entre las opciones de almacenamiento

Completado

.NET MAUI (Multi-Platform App UI) ofrece varias opciones de almacenamiento para almacenar datos en caché localmente en un dispositivo, dependiendo de la naturaleza, la estructura y el tamaño de los datos. Las tres opciones más usadas para almacenar datos localmente en una aplicación .NET MAUI son:

  • Preferencias: almacena datos en pares clave-valor.
  • Sistema de archivos: almacena archivos independientes directamente en el dispositivo mediante el acceso al sistema de archivos
  • Base de datos: almacena datos en una base de datos relacional completa.

Diagrama de las opciones de almacenamiento local comunes disponibles para una aplicación .NET MAUI.

En esta unidad, se examinan estas opciones de almacenamiento y las situaciones para las que cada opción es más adecuada.

Cuándo se deben usar las preferencias

Las preferencias son útiles cuando trabaja con datos sencillos, como selecciones de usuario. Suelen usarse para permitir que los usuarios configuren la aplicación. Los datos se almacenan como un conjunto de pares clave/valor. Por ejemplo, supongamos que quiere que el usuario pueda especificar si la aplicación debe guardar su nombre de usuario y contraseña entre sesiones. Puede almacenar la elección del usuario en Preferencias.

El siguiente código muestra cómo almacenar un valor booleano registrado en la variable saveLoginDetails en una preferencia llamada SaveLogin, y después volver a leer estos datos. Observe que el método Get espera que proporcione un valor predeterminado si no se encuentra la preferencia especificada:

bool saveLoginDetails = ...;
...
Preferences.Set("SaveLogin", saveLoginDetails);
...
var savedPreference = Preferences.Get("SaveLogin", false);

La clase Preferences también contiene métodos para determinar si existe una preferencia con nombre (ContainsKey), eliminar una preferencia (Remove) y quitar todos los datos de preferencia (Clear).

Nota

Solo debe almacenar tipos de datos simples como preferencias. No puede almacenar referencias a objetos grandes, como listas, colecciones y matrices. Para este tipo de datos, use el sistema de archivos o una base de datos.

Cuándo se debe usar el sistema de archivos

Los dispositivos móviles y de escritorio tienen un sistema de archivos real con una estructura jerárquica de directorios con archivos y carpetas. Es útil usar el sistema de archivos cuando hay archivos independientes, como archivos XML, binarios o de texto. Por ejemplo, suponga que quiere almacenar un registro de datos localmente en el dispositivo. Puede crear un archivo de texto, guardarlo en el sistema de archivos y escribir registros en él a medida que se producen eventos. También puede serializar estructuras de datos grandes a un archivo y almacenarlas en caché localmente en el sistema de archivos si necesita guardar cuando se apaga la aplicación. Cuando se reinicie la aplicación, podrá volver a leer estos datos en la memoria. El código siguiente muestra ejemplos de serialización de datos en un archivo y almacenamiento de este archivo, y luego lectura de los datos y deserialización en la memoria. Aquí, usamos JSON para el formato de serialización, pero puede guardar los datos en el formato que considere más apropiado para la naturaleza de los datos y los requisitos de seguridad de la aplicación.

using System.Text.Json;
using System.IO;

// Data to be written to the file system, and read back later
List<Customer> customers = ...;

// Serialize and save
string fileName = ...;
var serializedData = JsonSerializer.Serialize(customers);
File.WriteAllText(fileName, serializedData);
...

// Read and deserialize
var rawData = File.ReadAllText(fileName);
customers = JsonSerializer.Deserialize<List<Customer>>(rawData);

Acceso al espacio aislado de la aplicación

Cuando trabaja con archivos sueltos como archivos XML, debe almacenarlos en una ubicación adecuada en el sistema de archivos. Algunos de estos datos pueden ser confidenciales y no es conveniente guardarlos en una ubicación donde otras aplicaciones o usuarios puedan acceder a ellos fácilmente. Las aplicaciones .NET MAUI proporcionan el espacio aislado de la aplicación. El espacio aislado de aplicación es un área privada con la que la aplicación puede trabajar. De forma predeterminada, ninguna aplicación que no sea el propio sistema operativo puede acceder a esta área. Puede obtener acceso al espacio aislado mediante la propiedad estática AppDataDirectory de la clase FileSystem:

string path = FileSystem.AppDataDirectory;

En este código, la variable path contiene la ruta de acceso a la ubicación donde puede almacenar archivos para que los use la aplicación. Puede leer y escribir datos en archivos de esta carpeta mediante las técnicas que se muestran en la sección Cuándo usar el sistema de archivos.

Nota:

La propiedad FileSystem.AppDataDirectory es una abstracción de una ruta de acceso específica del dispositivo; se evalúa en diferentes carpetas en Android, iOS y WinUI3. Esta abstracción le permite escribir código que hace referencia al espacio aislado de una manera que es independiente de la plataforma en la que se ejecuta. Use esta abstracción en lugar de hacer referencia a una ruta específica del dispositivo explícitamente en el código.

Instrucciones para guardar datos en aplicaciones de iOS

Apple tiene directrices de iOS que indican dónde deben almacenarse los archivos. Hay dos ubicaciones de carpeta principales.

  • La carpeta Biblioteca: Como se ha descrito anteriormente, la propiedad FileSystem.AppDataDirectory devuelve esta carpeta. Use la carpeta Biblioteca al almacenar datos generados por la aplicación.

  • La carpeta Documentos: El fragmento de código siguiente muestra cómo hacer referencia a esta carpeta en la variable docFolder. Use la carpeta Documentos para almacenar únicamente datos generados por el usuario, Estos datos se crean en respuesta directa a una acción del usuario. Por ejemplo, si está creando una aplicación de edición de texto, como Microsoft Word, almacenaría el documento en la carpeta Documentos.

    string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    

Cuándo se debe usar una base de datos

Es recomendable usar una base de datos local si tiene relaciones de datos o si quiere filtrar los datos a lo largo del tiempo. Por ejemplo, en el escenario de redes sociales, cada publicación contiene datos sobre sí misma, como la marca de tiempo y el contenido. Además, cada publicación tiene una relación con el usuario que la realizó. Tendría sentido representar esta relación en una base de datos para evitar la duplicación de datos entre las publicaciones y también para mejorar la eficiencia de la búsqueda de datos.

Una base de datos SQLite es un archivo y necesita almacenarla en un lugar adecuado. Lo ideal es crear una carpeta debajo de la carpeta AppDataDirectory en el espacio aislado y crear la base de datos en esta carpeta.

1.

Pongamos que está creando una aplicación .NET MAUI para iOS que permita a los usuarios crear música. Quiere que los usuarios tengan la capacidad de guardar su trabajo en un archivo de modo que puedan reiniciar la aplicación y seguir trabajando donde lo han dejado. En el espacio aislado de aplicación de iOS, ¿en qué carpeta guardaría este archivo?

2.

Imagine que quiere almacenar un pequeño fragmento de datos para que sea accesible entre inicios de la aplicación. ¿Qué opción de almacenamiento de datos es más adecuada?