キャッシュベースのレイヤーを作成できます。あなたは、それがメモリのみ、またはメモリとディスクの両方に永続化したいかどうかを検討する必要があります。
私は、マルチレベル(メモリ、ディスク、ネットワーク)キャッシュシステムを提示します。私はこのアーキテクチャを成功裏に使用しました。シングルトンクラスとC#イベントで動作します。ハンドラには多くのサブスクライバ が存在します。したがって、UI画面は、データが利用可能なときに受信することができ、要求ごとに数回 を呼び出すことができます。デザインは、できるだけ早くデータを返すように設計されています(メモリから先に)が、データを更新するためにディスクとネットワークの呼び出しを行います。 UIは、メモリからのデータを素早くコールし、ネットワーク要求が完了したら再度コールバックするため、何度もコールバックされる可能性があります。スレッドの安全性を助けるために、ロックを使用するか、ConcurrentDictionaryやConcurrentQueueのようなスレッドセーフなコレクションを使用できます。考慮すべき多くのエッジケースがありますが、これはイベントを持つマルチレベルキャッシュシステムの基本アーキテクチャです。
// pseudo code
class CacheHelper
{
// todo: create singleton
RequestData()
{
if (data in memory)
{
// this quickly gets the app some data
Fetch data from dictionary/list/etc
NotifySubscribers(this, data)
}
if (data in disk)
{
// this gets data persisted after user force closes app then reopens
Fetch data from sqlite, file storage, etc
NotifySubscribers(this, data)
copy data from disk to memory
}
// always request data from server too to keep it fresh
RequestLatestDataFromServer(); // you can put a cap on this to limit network requests
}
HandleRequestLatestDataFromServerComplete(obj, args)
{
// this is the data returned from server
ALSO copy server result to memory and copy to disk
NotifySubscribers(this, data);
}
/// To use this in a UI class
ViewDidAppear()
{
CacheHelper.Instance.HandleRequestLatestDataFromServerComplete += ReceivedData;
}
ViewWillDisappear()
{
CacheHelper.Instance.HandleRequestLatestDataFromServerComplete -= ReceivedData;
}
void ReceivedData(Object obj, EventArgs args)
{
// update your UI
// This may get called a few times, for each level of cache retrieved
}
また、キャッシュシステムについては、https://github.com/akavache/Akavacheに適合している場合でも、Akavacheをご覧ください – jaybers