Comparer les options de stockage
.NET Multi-Platform App UI (MAUI) fournit plusieurs options de stockage pour la mise en cache de données localement sur un appareil, en fonction de la nature, de la structure et de la taille des données. Les trois options les plus couramment utilisées pour stocker des données localement dans une application .NET MAUI sont les suivantes :
- Préférences : Stocke les données dans des paires clé-valeur.
- Système de fichiers : Stocke les fichiers isolés directement sur l’appareil par l’accès au système de fichiers
- Base de données : stocke les données dans une base de données relationnelle.
Dans cette unité, nous examinons ces options de stockage et les situations pour lesquelles chaque option est la plus appropriée.
Quand utiliser l’option Préférences
L’option Préférences est pratique lorsque vous utilisez des éléments de données simples, tels que des sélections d’utilisateurs. Elles sont souvent utilisées pour permettre aux utilisateurs de configurer l’application. Vous stockez ces données sous la forme d’un ensemble de paires clé/valeur. Par exemple, supposons que vous souhaitiez que l’utilisateur puisse spécifier si l’application devrait enregistrer ses nom d’utilisateur et mot de passe entre les sessions. Vous pouvez stocker le choix de l’utilisateur dans Préférences.
Le code suivant montre comment stocker une valeur booléenne enregistrée dans la variable saveLoginDetails
dans une préférence nommée SaveLogin
, puis lire ces données ultérieurement. Notez que la méthode Get
s’attend à ce que vous fournissiez une valeur par défaut si la préférence spécifiée est introuvable :
bool saveLoginDetails = ...;
...
Preferences.Set("SaveLogin", saveLoginDetails);
...
var savedPreference = Preferences.Get("SaveLogin", false);
La classe Preferences
contient également des méthodes pour déterminer si une préférence nommée existe (ContainsKey
), supprimer une préférence (Remove
) et supprimer toutes les données de la préférence (Clear
).
Notes
Vous ne devriez stocker que des types de données simples en tant que préférences. Vous ne pouvez pas stocker de références à des objets volumineux tels que des listes, des collections et des tableaux. Pour ce type de données, utilisez le système de fichiers ou une base de données.
Quand utiliser le système de fichiers
Les appareils mobiles et de bureau disposent d’un système de fichiers avec une structure de répertoire hiérarchique de dossiers et de fichiers. L’utilisation du système de fichiers est pratique quand vous avez des fichiers isolés, comme des fichiers XML, binaires ou texte. Par exemple, supposons que vous vouliez stocker des données de journal localement sur l’appareil. Vous pouvez créer un fichier texte, l’enregistrer dans le système de fichiers, puis y écrire des journaux à mesure que des événements se produisent. Vous pouvez également sérialiser des structures de données volumineuses dans un fichier et mettre celui-ci en cache localement sur le système de fichiers si vous devez les enregistrer lorsque l’application s’arrête. Lorsque l’application redémarre, vous pouvez relire ces données en mémoire. Le code suivant montre des exemples de sérialisation des données dans un fichier et d’enregistrement de ce fichier, puis de relecture et de désérialisation des données en mémoire par la suite. Nous utilisons ici JSON pour le format de sérialisation, mais vous pouvez enregistrer les données dans le format que vous jugez le plus approprié à la nature des données et aux exigences de sécurité de l’application.
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);
Accéder au bac à sable d’application
Lorsque vous utilisez des fichiers libres, tels que des fichiers XML, vous devez les stocker dans un emplacement approprié du système de fichiers. Certaines de ces données peuvent être sensibles et vous ne souhaitez pas les enregistrer dans un emplacement auquel d’autres applications ou utilisateurs peuvent facilement accéder. Les applications .NET MAUI fournissent le bac à sable d’application. Le bac à sable de l’application est une zone privée dans laquelle votre application peut fonctionner. Par défaut, aucune autre application ne peut accéder à cette zone, hormis le système d’exploitation. Vous pouvez accéder au bac à sable à l’aide de la propriété statique AppDataDirectory
de la classe FileSystem
:
string path = FileSystem.AppDataDirectory;
Dans ce code, la variable path
contient le chemin d’accès à l’emplacement où vous pouvez stocker des fichiers en vue de leur utilisation par l’application. Vous pouvez lire et écrire des données dans des fichiers de ce dossier, en utilisant des techniques présentées dans la section Quand utiliser le système de fichiers.
Remarque
La propriété FileSystem.AppDataDirectory
est une abstraction d’un chemin d’accès spécifique de l’appareil. Elle prend la valeur de différents dossiers sur Android, iOS et WinUI3. Cette abstraction vous autorise à écrire du code faisant référence au bac à sable d’une manière indépendante de la plateforme sur laquelle il s’exécute. Utilisez cette abstraction plutôt que de référencer explicitement un chemin propre à l’appareil dans votre code.
Instructions pour l’enregistrement des données dans des applications iOS
Apple fournit des instructions pour l’endroit où les fichiers doivent être stockés sur iOS. Il existe deux emplacements principaux pour les dossiers :
Le dossier Bibliothèque : Comme décrit précédemment, la propriété
FileSystem.AppDataDirectory
retourne ce dossier. Utilisez le dossier Bibliothèque quand vous stockez des données générées par une application.Le document Documents : L’extrait de code suivant montre comment référencer ce dossier dans la variable
docFolder
. Utilisez le dossier Documents seulement pour stocker les données générées par l’utilisateur. Ces données sont créées en réponse directe à une action de l’utilisateur. Par exemple, si vous avez créé une application d’édition de texte comme Microsoft Word, vous devez stocker le document dans le dossier Documents.string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Quand utiliser une base de données
Il est judicieux d’utiliser une base de données locale quand vous avez des relations entre les données ou que vous voulez filtrer les données au fil du temps. Ainsi, dans le scénario de média social, chaque post contient des données relatives au post, comme l’horodatage et le contenu. Toutefois, chaque post a également une relation avec un utilisateur qui a créé le post. Il est judicieux de représenter cette relation dans une base de données pour éviter la duplication de données entre les posts ainsi que pour améliorer l’efficacité de la recherche de données.
Une base de données SQLite est un fichier que vous devez stocker dans un emplacement approprié. Dans l’idéal, vous devriez créer un dossier sous le dossier AppDataDirectory
dans le bac à sable, et créer la base de données dans ce dossier.