2016-06-14 76 views
0

此刻,我的程序不斷重複查詢相同的存儲庫。我目前使用UnitOfWork模式來查詢我的表格。使用UnitOfWork進行緩存

例如是跑得很經常

var peopleCollection = UnitOfWork.PersonRepository.Get(x => x.Active); 

爲了提高我的軟件,以減少重複任務查詢,請問什麼是正確的方法,我應該採取緩存如果我有一個的UnitOfWork模式。我知道我可以將集合保存到字典中,並隨時隨地調用該字典。但是這種方法的主要問題是,如果另一個用戶要保存一個新人,我會收集過時的人。

+0

沒有緩存你有沒有真正的UOW。如果您需要從數據庫獲取新數據,則需要處理UOW實例並創建一個新實例。 –

回答

0

簡短的回答是,每種情況都需要稍微不同的解決方案。

通常,最好的解決方案是使用Decorator模式緩存重複數據調用,並確保緩存使用適當的過期策略使舊數據失效。

例如,假設它不會讓您的用戶擁有長達60秒的Person數據。在這種情況下,您可以將緩存過期設置爲60秒。

這裏是一個通用的緩存項,這將是完美的字典中的儲存樣品:

public class CachedItem<T> 
{ 
    private readonly T _item; 
    private readonly DateTime _expirationTime; 

    public CachedItem(T obj, TimeSpan cacheDuration) 
    { 
     _item = obj; 
     _expirationTime = DateTime.Now.Add(cacheDuration); 
    } 

    public bool IsExpired { get { return DateTime.Now > _expirationTime; } } 

    public T Item 
    { 
     get 
     { 
      if (IsExpired) 
       throw new InvalidOperationException("Expired Cached Items cannot be retrieved."); 

      return _item; 
     } 
    } 
}