2016-06-14 125 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; 
     } 
    } 
}