在多个聚合根之间进行分页

时间:2012-04-28 06:42:49

标签: domain-driven-design paging aggregateroot

我是DDD的新手,所以如果某些术语/理解有点失误,请执行我。但请纠正我,任何建议都表示赞赏。

假设我正在做一个社交工作委员会网站,我已经确定了我的总体根源:候选人,工作和公司。非常不同的事物/上下文,因此每个都有自己的数据库表,存储库和服务。但现在我必须构建一个Pinterest风格的主页,其中数据块显示候选人,工作或公司的数据。

现在最棘手的部分是数据块必须在最后一次发生在它所代表的聚合(公司被喜欢/评论,或者作业更新等)的情况下进行排序,并且分页以无限的形式发生滚动,再次像Pinterest一样。由于这些聚合事件独立发生,我无法知道聚合在任何特定页面上有多少聚合。 (但是,如果我顺便说一句,说一个跟踪聚合的最后更新时间的表,我别无选择,只能将其作为另一个聚合根,并使用它自己的存储库吗?)

我在哪里实现分页逻辑?我在某处读到每个聚合根每个存储库应该有一个服务,所以我应该在控制器中进行排序和分页(顺便说一下我使用的是MVC)?或者是否应该有一个独立的应用服务来做这样的跨境事务?无论哪种情况,我都必须从db?

获取ALL聚合的所有实体

这已经是太多问题,但我基本上都在问:

  1. 是分页演示,业务还是持久性逻辑?哪个水平层?
  2. 跨境代码应该位于DDD的哪个位置?哪个垂直堆栈?

1 个答案:

答案 0 :(得分:0)

有些事情会浮现在脑海中。

  • 这些汇总数据需要有多新鲜?我怀疑实时会增加很多价值。与商务人士交谈,讨价还价。这将允许您构建一个更简单的问题解决方案。
  • 为什么不让某些进程进行异步扫描,聚合,排序和存储结果?甚至不需要在数据库中(Redis)。讨价还价的延迟可能是运行流程的时间间隔。
  • 在您的示例中,分页几乎不是业务决策问题。您只需要提供无限滚动和一些获取缓存,聚合,排序信息的ajax调用。这与DDD没什么关系。
  • 您的UI工件和聚合,排序过程本身似乎是一件非常重要的事情,与数据一起工作,或者 - 更好的是 - 每个上下文的数据组件,以所需的格式提供数据。