Opslagopties vergelijken
.NET Multi-Platform App UI (MAUI) biedt meerdere opslagopties voor het lokaal opslaan van gegevens op een apparaat, afhankelijk van de aard, structuur en grootte van de gegevens. De drie meestgebruikte opties voor het lokaal opslaan van gegevens in een .NET TENANT-app zijn:
- Voorkeuren: Slaat gegevens op in sleutel-waardeparen
- Bestandssysteem: slaat losse bestanden rechtstreeks op het apparaat op via bestandssysteemtoegang
- Database: Slaat gegevens op in een relationele database
In deze eenheid bekijken we deze opslagopties en de situaties waarvoor elke optie het meest geschikt is.
Wanneer gebruikt u Voorkeuren?
Voorkeuren zijn handig wanneer u werkt met eenvoudige stukjes gegevens, zoals gebruikersselecties. Ze worden vaak gebruikt om gebruikers toe te staan de toepassing te configureren. U slaat deze gegevens op als een set sleutel-waardeparen. Stel dat u wilt dat de gebruiker kan opgeven of de app de gebruikersnaam en het wachtwoord tussen de sessie moet opslaan. U kunt de keuze van de gebruiker opslaan in Voorkeuren.
De volgende code laat zien hoe u een Booleaanse waarde opslaat die in de saveLoginDetails
variabele is vastgelegd in een voorkeur met de naam SaveLogin
en deze gegevens later weer leest. U ziet dat de Get
methode verwacht dat u een standaardwaarde opgeeft als de opgegeven voorkeur niet wordt gevonden:
bool saveLoginDetails = ...;
...
Preferences.Set("SaveLogin", saveLoginDetails);
...
var savedPreference = Preferences.Get("SaveLogin", false);
De Preferences
klasse bevat ook methoden voor het bepalen of er een benoemde voorkeur bestaat (ContainsKey
), het verwijderen van een voorkeur (Remove
) en het verwijderen van alle voorkeursgegevens (Clear
).
Notitie
U moet alleen eenvoudige gegevenstypen opslaan als voorkeuren. U kunt geen verwijzingen opslaan naar grote objecten, zoals lijsten, verzamelingen en matrices. Gebruik voor dit type gegevens het bestandssysteem of een database.
Wanneer moet u het bestandssysteem gebruiken
Mobiele en desktopapparaten hebben een bestandssysteem met een hiërarchische mapstructuur van mappen en bestanden. Het is handig om het bestandssysteem te gebruiken wanneer u losse bestanden hebt, zoals XML-, binaire of tekstbestanden. Stel dat u logboekgegevens lokaal wilt opslaan op het apparaat. U kunt een tekstbestand maken, dit bestand opslaan in het bestandssysteem en logboeken naar het bestandssysteem schrijven wanneer er gebeurtenissen plaatsvinden. U kunt ook grote gegevensstructuren serialiseren naar een bestand en deze lokaal opslaan in het bestandssysteem als u wilt opslaan wanneer de app wordt afgesloten. Wanneer de app opnieuw wordt opgestart, kunt u deze gegevens opnieuw lezen in het geheugen. De volgende code toont voorbeelden van het serialiseren van gegevens naar een bestand en het opslaan van dit bestand, en het lezen van de gegevens terug en het deserialiseren van gegevens in het geheugen later. Hier gebruiken we JSON voor de serialisatie-indeling, maar u kunt de gegevens opslaan in de indeling die u het meest geschikt vindt voor de aard van de gegevens en de beveiligingsvereisten van de app.
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);
Toegang tot de app-sandbox
Wanneer u met losse bestanden zoals XML-bestanden werkt, moet u ze opslaan op een geschikte locatie in het bestandssysteem. Sommige van deze gegevens zijn mogelijk gevoelig en u wilt deze niet opslaan op een locatie waar andere apps of gebruikers deze gemakkelijk kunnen openen. .NET MAUI-apps bieden de app-sandbox. De app-sandbox is een privégebied waarmee uw toepassing kan werken. Standaard hebben geen andere toepassingen toegang tot dit gebied dan het besturingssysteem. U hebt toegang tot de sandbox met behulp van de AppDataDirectory
statische eigenschap van de FileSystem
klasse:
string path = FileSystem.AppDataDirectory;
In deze code bevat de path
variabele het bestandspad naar de locatie waar u bestanden kunt opslaan die door de toepassing moeten worden gebruikt. U kunt gegevens lezen en schrijven naar bestanden in deze map met behulp van de technieken die worden weergegeven in de sectie Wanneer gebruikt u het bestandssysteem .
Notitie
De FileSystem.AppDataDirectory
eigenschap is een abstractie van een apparaatspecifiek pad; het evalueert naar verschillende mappen op Android, iOS en WinUI3. Met deze abstractie kunt u code schrijven die verwijst naar de sandbox op een manier die onafhankelijk is van het platform waarop deze wordt uitgevoerd. Gebruik deze abstractie in plaats van expliciet naar een apparaatspecifiek pad in uw code te verwijzen.
Richtlijnen voor het opslaan van gegevens in iOS-apps
Apple heeft iOS-richtlijnen voor waar bestanden moeten worden opgeslagen. Er zijn twee hoofdmaplocaties:
De map Bibliotheek: Zoals eerder beschreven, retourneert de
FileSystem.AppDataDirectory
eigenschap deze map. Gebruik de map Bibliotheek wanneer u door de app gegenereerde gegevens opslaat.De map Documenten: Het volgende codefragment laat zien hoe u naar deze map in de
docFolder
variabele verwijst. Gebruik de map Documenten om alleen door de gebruiker gegenereerde gegevens op te slaan. Deze gegevens worden gemaakt in directe reactie op een gebruikersactie. Als u bijvoorbeeld een toepassing voor tekstbewerking zoals Microsoft Word maakt, slaat u het document op in de map Documenten.string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Wanneer gebruikt u een database?
Het is een goed idee om een lokale database te gebruiken wanneer u relaties hebt tussen gegevens of wanneer u de gegevens in de loop van de tijd wilt filteren. Bijvoorbeeld: in het scenario voor sociale media bevat elk bericht gegevens over het bericht, zoals de tijdstempel en de inhoud. Elk bericht heeft echter ook een relatie met een gebruiker die het bericht heeft gemaakt. Het is zinvol om deze relatie in een database te vertegenwoordigen om gegevensduplicatie tussen berichten te voorkomen en om de efficiëntie van het zoeken naar gegevens te verbeteren.
Een SQLite-database is een bestand en u moet deze op een geschikte plaats opslaan. In het ideale geval moet u een map maken onder de AppDataDirectory
map in de sandbox en de database in deze map maken.