可以通过存储库与服务层返回视图或ViewModel吗?哪个应该缓存?

时间:2011-11-15 04:15:39

标签: linq azure repository repository-pattern odata

我正在使用Azure AppFabric进行全新存储库的缓存。我的存储库看起来像这样:

public interface IMyRepository
{
  public IEnumerable<K> Select(IQueryable<T> someQuery) 
  public IEnumerable<T> SelectAllStudents()  // should I replace T with Children in my repository?
}

我的目的是公开和缓存来自客户端的OData请求,因此IQueryable。我还需要经常返回看起来像这样的数据

public class Children
{
  public string Name {get;set;}

  public int CountOfToys {get;set;}

  public List<Toys> {get;set;}
}

然而,我的数据库是儿童玩具的1..many

当前的ASP.NET应用程序直接在aspx页面中使用EF的导航属性来填充上面的ViewModel,但是我不知道最有效的路由将此功能移植到存储库。

由于AppFabric缓存,我对IEnumerable结果的约束是:

  • 返回的对象不能是值类型
  • 返回的对象必须是可序列化的
  
      
  1. 如何实现IMyRepository以支持缓存OData查询?
  2.   
  3. 存储库不仅可以发出模型类,还可以发出“子”聚合类吗?什么是适当的术语?
  4.   
  5. 假设上面的步骤是正确的,我应该使用导航属性来填充这个额外的类吗?
  6.   

1 个答案:

答案 0 :(得分:0)

缓存存储库实体将更容易控制,这意味着您的系统中有一个内存数据库,但性能和灵活性较低。缓存域对象可以提供更高的性能,因为它更接近您实际要缓存的内容。但您需要考虑缓存项之间的同步。我想通过引入一个单独的缓存管理器组件来缓存服务层。