Vergleichen von Speicheroptionen
.NET Multi-Platform App UI (MAUI) bietet je nach Art, Struktur und Größe der Daten mehrere Speicheroptionen zum lokalen Zwischenspeichern von Daten auf einem Gerät. Die drei gängigsten Optionen zum lokalen Speichern von Daten in einer .NET MAUI-App sind:
- Einstellungen: Speichert Daten in Schlüssel-Wert-Paaren.
- Dateisystem: Speichert unverbundene Dateien per Dateisystemzugriff direkt auf dem Gerät
- Datenbank: Speichert Daten in einer relationalen Datenbank.
In dieser Lerneinheit betrachten wir die oben genannten Speicheroptionen sowie die Situationen, für die sie jeweils am besten geeignet sind.
Verwenden von Einstellungen
Einstellungen sind praktisch, wenn Sie mit einfachen Daten arbeiten – etwa mit Benutzeroptionen. Sie werden häufig verwendet, um Benutzern das Konfigurieren der Anwendung zu ermöglichen. Diese Daten werden als Schlüssel-Wert-Paare gespeichert. Angenommen, Sie möchten, dass der Benutzer angeben kann, ob die App den Benutzernamen und das Kennwort zwischen Sitzungen speichern soll. Die Auswahl des Benutzers kann in Einstellungen gespeichert werden.
Der folgende Code zeigt, wie Sie einen booleschen Wert, der in der Variablen saveLoginDetails
erfasst wurde, in einer Einstellung namens SaveLogin
speichern und die Daten später wieder auslesen. Beachten Sie, dass von der Get
-Methode die Angabe eines Standardwerts erwartet wird, wenn die angegebene Einstellung nicht gefunden wird:
bool saveLoginDetails = ...;
...
Preferences.Set("SaveLogin", saveLoginDetails);
...
var savedPreference = Preferences.Get("SaveLogin", false);
Die Klasse Preferences
enthält auch Methoden zum Bestimmen, ob eine benannte Einstellung vorhanden ist (ContainsKey
), zum Löschen einer Einstellung (Remove
) und zum Entfernen aller Einstellungsdaten (Clear
).
Hinweis
Als Einstellungen sollten nur einfache Datentypen gespeichert werden. Verweise auf große Objekte wie Listen, Sammlungen und Arrays können nicht gespeichert werden. Verwenden Sie für diese Datentypen das Dateisystem oder eine Datenbank.
Verwenden des Dateisystems
Mobile Geräte und Desktopgeräte verfügen über ein Dateisystem mit einer hierarchischen Verzeichnisstruktur aus Ordnern und Dateien. Das Dateisystem eignet sich sehr gut für unverbundene Dateien wie XML-, Binär- oder Textdateien. Angenommen, Sie möchten Protokolldaten lokal auf dem Gerät speichern. Sie können eine Textdatei erstellen, die Datei im Dateisystem speichern und Protokolle in diese Datei schreiben, wenn Ereignisse auftreten. Sie können auch große Datenstrukturen in einer Datei serialisieren und lokal im Dateisystem zwischenspeichern, wenn Sie beim Herunterfahren der App Daten speichern müssen. Beim nächsten Start der App können die Daten dann wieder in den Arbeitsspeicher gelesen werden. Der folgende Code enthält Beispiele für das Serialisieren von Daten in einer Datei und das Speichern dieser Datei sowie für das spätere Auslesen und Deserialisieren der Daten in den Arbeitsspeicher. Hier wird JSON als Serialisierungsformat verwendet. Sie können die Daten jedoch in dem Format speichern, das Ihrer Meinung nach für die Art der Daten und die Sicherheitsanforderungen der App am besten geeignet ist.
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);
Zugreifen auf die App-Sandbox
Unverbundene Dateien wie etwa XML-Dateien müssen an einem geeigneten Speicherort im Dateisystem gespeichert werden. Einige dieser Daten sind möglicherweise vertraulich und dürfen nicht an einem Speicherort gespeichert werden, an dem andere Apps oder Benutzer problemlos auf sie zugreifen können. .NET MAUI-Apps bieten die App-Sandbox. Eine App-Sandbox ist ein privater Bereich, mit dem Ihre Anwendung arbeiten kann. Standardmäßig können außer dem Betriebssystem keine Anwendungen auf diesen Bereich zugreifen. Sie können mithilfe der statischen Eigenschaft AppDataDirectory
der Klasse FileSystem
auf die Sandbox zugreifen:
string path = FileSystem.AppDataDirectory;
In diesem Code enthält die Variable path
den Dateipfad zu dem Speicherort, an dem Sie Dateien speichern können, die der Anwendung zur Verfügung stehen sollen. Mithilfe der im Abschnitt Verwenden des Dateisystems gezeigten Techniken können Sie Daten aus Dateien in diesem Ordner lesen oder Daten in Dateien in diesem Ordner schreiben.
Hinweis
Die Eigenschaft FileSystem.AppDataDirectory
ist eine Abstraktion eines gerätespezifischen Pfads, und ihre Auswertung ergibt unter Android, iOS und WinUI3 jeweils unterschiedliche Ordner. Dank dieser Abstraktion kann im Code so auf die Sandbox verwiesen werden, dass der Verweis unabhängig von der ausführenden Plattform funktioniert. Verwenden Sie diese Abstraktion, anstatt in Ihrem Code explizit auf einen gerätespezifischen Pfad zu verweisen.
Richtlinien für das Speichern von Daten in iOS-Apps
Apple hat Richtlinien für die Speicherorte von Dateien unter iOS eingerichtet. Es gibt zwei Hauptspeicherorte:
Der Bibliothek-Ordner: Wie beschrieben gibt die Eigenschaft
FileSystem.AppDataDirectory
diesen Ordner zurück. Verwenden Sie den Ordner „Bibliothek“, wenn Sie Daten speichern, die von Apps generiert werden.Der Dokumente-Ordner: Der folgende Codeausschnitt zeigt, wie Sie auf diesen Ordner in der Variablen
docFolder
verweisen. Verwenden Sie den Ordner Dokumente nur zum Speichern benutzergenerierter Daten. Diese Daten werden als direkte Reaktion auf eine Benutzeraktion erstellt. Wenn Sie z.B. eine Anwendung für die Textbearbeitung wie Microsoft Word erstellen, speichern Sie die Dokumente im Ordner Dokumente.string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Verwenden einer Datenbank
Eine lokale Datenbank eignet sich dann sehr gut, wenn Beziehungen zwischen Daten bestehen oder Sie die Daten im Lauf der Zeit filtern möchten. Beispiel: Im Social-Media-Szenario enthält jeder Beitrag individuelle Daten, z. B. den Zeitstempel und den Inhalt. Jeder Beitrag besitzt aber auch eine Beziehung zu einem Benutzer, der den Beitrag erstellt hat. Es ist sinnvoll, diese Beziehung in einer Datenbank darzustellen, um eine Datenduplizierung zwischen Beiträgen zu verhindern und die Effizienz beim Suchen nach Daten zu verbessern.
Eine SQLite-Datenbank ist eine Datei, die an einem geeigneten Ort gespeichert werden muss. Im Idealfall sollten Sie einen Ordner unter dem Ordner AppDataDirectory
in der Sandbox und die Datenbank dann in diesem Ordner erstellen.