Xamarin.Forms
caching
Zoeken…
Caching met behulp van Akavache
Over Akavache
Akavache is een ongelooflijk nuttige bibliotheek die bereikfunctionaliteit biedt voor het cachen van uw gegevens. Akavache biedt een opslaginterface met sleutelwaarde en werkt bovenop SQLite3. U hoeft uw schema niet gesynchroniseerd te houden, omdat het eigenlijk geen SQL-oplossing is, waardoor het perfect is voor de meeste mobiele applicaties, vooral als u uw app vaak wilt bijwerken zonder gegevensverlies.
Aanbevelingen voor Xamarin
Akavache is absoluut de beste cachebibliotheek voor de Xamarin-toepassing als u niet hoeft te werken met sterk relatieve gegevens, binaire of echt grote hoeveelheden gegevens. Gebruik Akavache in de volgende gevallen:
- U hebt uw app nodig om de gegevens gedurende een bepaalde periode in de cache te bewaren (u kunt een time-out voor de vervaldatum instellen voor elke entiteit die wordt opgeslagen;
- U wilt dat uw app offline werkt;
- Het is moeilijk om het schema van uw gegevens te bepalen en te bevriezen. U hebt bijvoorbeeld lijsten met verschillende getypte objecten;
- Het volstaat voor u om eenvoudige toegang met sleutelwaarden tot de gegevens te hebben en u hoeft geen complexe vragen te stellen.
Akavache is geen "zilveren kogel" voor gegevensopslag, dus denk er goed over na om het in de volgende gevallen te gebruiken:
- Uw data-entiteiten hebben veel relaties tussen elkaar;
- Je hebt je app niet echt nodig om offline te werken;
- U hebt een enorme hoeveelheid gegevens die lokaal moeten worden opgeslagen;
- U moet uw gegevens van versie naar versie migreren;
- U moet complexe query's uitvoeren die typisch zijn voor SQL, zoals groeperen, projecties, enz.
Eigenlijk kunt u uw gegevens handmatig migreren door ze gewoon te lezen en terug te schrijven met bijgewerkte velden.
Eenvoudig voorbeeld
Interactie met Akavache gebeurt hoofdzakelijk via een object genaamd BlobCache
.
De meeste methoden van Akavache retourneren reactieve waarnemingen, maar je kunt ze ook gewoon wachten dankzij uitbreidingsmethoden.
using System.Reactive.Linq; // IMPORTANT - this makes await work!
// Make sure you set the application name before doing any inserts or gets
BlobCache.ApplicationName = "AkavacheExperiment";
var myToaster = new Toaster();
await BlobCache.UserAccount.InsertObject("toaster", myToaster);
//
// ...later, in another part of town...
//
// Using async/await
var toaster = await BlobCache.UserAccount.GetObject<Toaster>("toaster");
// or without async/await
Toaster toaster;
BlobCache.UserAccount.GetObject<Toaster>("toaster")
.Subscribe(x => toaster = x, ex => Console.WriteLine("No Key!"));
Foutafhandeling
Toaster toaster;
try {
toaster = await BlobCache.UserAccount.GetObjectAsync("toaster");
} catch (KeyNotFoundException ex) {
toaster = new Toaster();
}
// Or without async/await:
toaster = await BlobCache.UserAccount.GetObjectAsync<Toaster>("toaster")
.Catch(Observable.Return(new Toaster()));