Windows Phone App 必備的資料快取 Framework - AgFx
在開發 App 程式時, 程式的反應速度是影響使用者操作體驗重要的因素. 尤其是行動裝置常處在網路不穩的環境 (如捷運人多時, 或3G 訊號較弱時) .
為了確保使用者在來回操作App的過程中, 不需要反覆的存取網路上相同的資料, 因此在這邊推薦給Windows Phone 的開發者, AgFx 這個相當棒的資料快取 Framework.
原作者已經提供一個相當清楚的 Step by Step Sample.
主要有五個步驟:
1. 分析你的資料來源: 通常是確認資料來源如何解析, 筆者通常會先試著寫程式解析看看. 例如資料源是Json 就用 Json.Net 先Parse 成 Data Object. XML .
eg. MyDataObject myDataObject= (MyDataObject )JsonConvert.DeserializeObject(contents, typeof(MyDataObject ));
2. 找出要快取資料的Key 值: 也就是系統用來辨識這個資料是不是已經存在快取資料區中的唯一依據.
Key 值建議是string(如果是複雜的Key值, 不是string 的話, 要額外實作一個ToString()的方法) , 同時宣告一個繼承 AgFx LoadContext 物件的 LoadContext物件.
public class MyLoadContext: LoadContext
{
public string KeyValue{
get {
return (string)Identity;
}
}
public MyLoadContext(string keyValue)
: base(KeyValue) {
}
}
3. 第三部會需要定義 ViewModel 物件: 也就是要透過AgFx 來協助做快取的資料物件. 這個物件需要繼承 AgFx 的 ModelItemBase 物件
public class MyViewModel: ModelItemBase<MyLoadContext> {
public MyViewModel() { }
public MyViewModel(string keyValue): base(new MyLoadContext(keyValue)) { }
........
}
4. 第四部份是決定資料快取的方式: AgFx 提供四種資料快取的部分
CachePolicy.NoCache : 不做快取
CachePolicy.ValidCacheOnly : 僅使用未過期的快取資料, 這是確保不會顯示過期資料最普遍的設定
CachePolicy.CacheThenRefresh: 先顯示快取資料, 但如果資料過期了, 馬上從網路取得更新資料並更新UI. 如果希望App 可以先顯示資料給使用者, 然後再更新過期資料, 這是最常用的設定.
CachePolicy.AutoRefresh : 當資料過期時, 自動更新資料.
宣告資料快取的範例如下:
[CachePolicy(CachePolicy.CacheThenRefresh, 60*15)] // 資料快取15分鐘
public class MyDataVM: ModelItemBase<MyLoadContect>{…}
5.第五步驟是 取得資料: 為了使用AgFx的快取, 所有資料都必須透過 實作 AgFx 的 IDataLoader 介面的DataLoader 物件去讀取資料.
DataLoader 物件通常是宣告再ViewModel物件中. 在 IDataLoader 介面裏頭主要有兩個Method:
public LoadRequest GetLoadRequest(MyLoadContext loadContext, Type objectType)
{....}
public object Deserialize(MyLoadContext loadContext, Type objectType, System.IO.Stream stream)
{ ....}
完成這幾個部分後, 就可以透過 DataManager 物件去載入資料:
DataManager.Current.Load<MyDataVM>("keyValue");
AgFx 將會跟去Cache Policy 決定需不需要從網路讀取新的資料.
在測試過程中, 你也可以開 Visual Studio 的OutPut 視窗 來檢視 快取運作的狀況.
以上很快介紹 AgFx 的資料快取Framework. 希望大家有機會都可盡量把資料快取加入App 中, 可以讓你的App帶給使用者更順暢的體驗.