2012-11-08 39 views
0

緩存模式我有我試圖實施,以加快讀取數據,每次我的類方法被調用過程高速緩存的WinForm應用程序。我正在考慮使用類似Singleton的方法。我想到的是這樣的:設計爲的WinForms

public class MyCache { 
    private MyDataClass _cacheData; 
    private static MyCache _cache; 

    public static MyCache CreateCache() 
    { 
     return _cache ?? new MyCache(); 
    } 

    public void CacheData(MyDataClass data) 
    { 
     _cache = data; 
    } 

    public MyDataClass GetCache() 
    { 
     return _cache; 
    } 
} 

有人能告訴我,如果這個方法是好的,或者有更好的方法,我應該使用?

+0

取決於你在緩存什麼...... – Neolisk

+0

Neolisk - 它的數據來自數據庫。 – Icemanind

+0

您需要詳細說明數據庫中的哪些數據,如何使用等。沒有更多信息,很難說出任何內容。您要求抽象緩存抽象表單,對抽象數據庫進行處理。這就像是在真空中對一匹球形馬進行原型設計。 – Neolisk

回答

1

對於你的情況,我建議表單級高速緩存,具有相應的屬性,即共享/靜態列表。通過列表我的意思是任何類型的對象,但很可能它會是一個字典 - 有一個(key,value)對。在每個屬性中,如果從數據庫填充Nothing,然後從_variable中讀取,那麼它將只加載一次。事情是這樣的:

Dictionary<string, string> _VendorData; 
public object VendorData 
{ 
    get 
    { 
    if (_VendorData == null) 
     _VendorData = GetVendorDictionary(); 
    return _VendorData; 
    } 
} 

public Dictionary<string, string> GetVendorDictionary() 
{ 
    //get vendor data from database and populate a dictionary 
} 

如果你打算在你的緩存更多的對象,你可能會考慮創造一個<YourObjectTypesEnum, Dictionary<String, String>>代替Dictionary,其中YourObjectTypesEnum可以VendorManufacturingLocation等,所以你得到嚴格打字您的代碼,而不是通過String訪問。然後,您將測試ContainsKey而不是空檢查和.Add字典,如果丟失。

如果以後決定使用其他形式此緩存,您可以輕鬆地將其移動到一個單獨的類,因爲所有的方法和屬性都是靜態的反正。