使用分页构建raven + repository的正确方法

时间:2014-03-18 16:59:23

标签: ravendb

假设这个设置:

interface IRepo 
{ 
  IEnumerable<Project> GetAllProjects();
}

class RavenRepo : IRepo
{
  IEnumerable<Project> GetAllProjects()
  {
     return session.query<Project>();
  }
}

class ApplicationService
{
  IRepo repo;
  public IEnumerable<Project> GetProjectsOrderedBySomething()
  {
    return repo.GetAllProjects().OrderBy(...);
  } 
}

这很好用,但我想添加分页,一直回到Repo。如果我只是将它添加到GetAllProjects,OrderBy将无法正常工作。我看到三个选项:

  1. 为每个新订单添加新方法。
  2. 返回IQueryable。
  3. 传递keySelectors列表。
  4. 我不喜欢从存储库外推迟执行的想法,但我认为选项2除此之外最有用吗?此外,这会给服务带来分页的负担(和责任),这意味着有人可能会错过使用分页的要求。

1 个答案:

答案 0 :(得分:1)

正如您所知,这是一个非常糟糕的主意。 有关详情,请参阅此处:http://www.wekeroad.com/2014/03/04/repositories-and-unitofwork-are-not-a-good-idea/

但是,一般情况下,不要将存储库与RavenDB一起使用。