几天前,我遇到了this blog post,它提供了一个可插入的缓存管理器来使用不同的缓存提供程序。基本上,我们有一个ICacheProvider接口:
public interface ICacheProvider
{
void Store(string key, object data);
void Destroy(string key);
T Get<T>(string key);
}
和CacheManager类:
public class CacheManager
{
protected ICacheProvider _repository;
public CacheManager(ICacheProvider repository)
{
_repository = repository;
}
public void Store(string key, object data)
{
_repository.Store(key, data);
}
public void Destroy(string key)
{
_repository.Destroy(key);
}
public T Get<T>(string key)
{
return _repository.Get<T>(key);
}
}
最后,我们可以编写自己的提供者:
public class SessionProvider : ICacheProvider
{
public void Store(string key, object data)
{
HttpContext.Current.Cache.Insert(key, data);
}
public void Destroy(string key)
{
HttpContext.Current.Cache.Remove(key);
}
public T Get<T>(string key)
{
T item = default(T);
if (HttpContext.Current.Cache[key] != null)
{
item = (T)HttpContext.Current.Cache[key];
}
return item;
}
}
嗯,我很确定此代码根据http://www.dofactory.com/Patterns/PatternAdapter.aspx的定义使用适配器模式 但似乎我们可以说它也使用了Repository模式(除了它与数据的基本CRUD操作没有任何关系,这通常是使用Repository模式的地方)。它包含了接口中缓存管理器的常规内容。
我们可以说这段代码使用了Repository模式和适配器模式吗?
答案 0 :(得分:0)
我想是的,因为这不是一个存储库。
存储库是域对象的集合,它设法将域业务转换为从业务本身抽象出来的另一件事。
换句话说,我再说一遍,这不是存储库。
答案 1 :(得分:-1)
它看起来像一个存储库模式。