Ravendb 正确构造raven+;带分页的存储库

Ravendb 正确构造raven+;带分页的存储库,ravendb,Ravendb,假设此设置: interface IRepo { IEnumerable<Project> GetAllProjects(); } class RavenRepo : IRepo { IEnumerable<Project> GetAllProjects() { return session.query<Project>(); } } class ApplicationService { IRepo repo; pub

假设此设置:

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(...);
  } 
}
接口IRepo
{ 
IEnumerable GetAllProjects();
}
RavenRepo类:IRepo
{
IEnumerable GetAllProjects()
{
返回session.query();
}
}
类应用程序服务
{
IRepo回购;
公共IEnumerable GetProjectSordedBySomething()
{
返回repo.GetAllProjects().OrderBy(…);
} 
}
这很好,但我想添加分页,一直回到回购协议。如果我只是将其添加到GetAllProjects中,OrderBy将无法工作。我认为有三种选择:

  • 为每个新订单添加一个新方法
  • 返回IQueryable
  • 传递关键点选择器的列表

  • 我不喜欢从存储库外部推迟执行的想法,但我想选项2是除此之外最有用的?此外,这将分页的负担(和责任)放到了服务上,这意味着有人可能会错过使用分页的要求。

    正如您所发现的,这是一个非常糟糕的主意。 有关更多详细信息,请参见此处:


    但是,一般来说,不要将存储库与RavenDB一起使用。

    这是一篇伟大而糟糕的博客文章。很好,因为这种货物崇拜的趋势已经让我很恼火,并把我拖了一段时间。糟透了,因为现在我不得不把我们以前的所有项目都推向CQR或类似的目标。。。