此代码段是否使用存储库或适配器模式?

时间:2011-01-24 11:34:57

标签: c# design-patterns adapter repository-pattern

几天前,我遇到了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模式适配器模式吗?

2 个答案:

答案 0 :(得分:0)

我想是的,因为这不是一个存储库。

存储库是域对象的集合,它设法将域业务转换为从业务本身抽象出来的另一件事。

换句话说,我再说一遍,这不是存储库。

答案 1 :(得分:-1)

它看起来像一个存储库模式。