多个聚合根之间的分页

问题描述 投票:0回答:1

我是 DDD 新手,所以如果某些术语/理解有问题,请执行我。但请纠正我,如有任何建议,我们将不胜感激。

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

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

我在哪里实现分页逻辑?我在某处读到,每个聚合根每个存储库应该有一个服务,所以我应该在控制器中排序和分页(顺便说一下,我正在使用 MVC)?或者应该有一个独立的应用程序服务来完成这样的跨界工作?无论哪种情况,我都必须从数据库中获取所有聚合的所有实体?

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

  1. 分页是呈现逻辑、业务逻辑还是持久逻辑?哪个水平层?
  2. 跨界代码应该驻留在 DDD 中的什么位置?哪个垂直堆栈?
pagination domain-driven-design aggregateroot
1个回答
0
投票

我想到了几件事。

  • 这些汇总数据需要有多新鲜?我怀疑实时会增加多少价值。与业务人员交谈并讨价还价一些延迟。这将使您能够构建更简单的问题解决方案。
  • 为什么不让某个进程异步执行扫描、聚合、排序并存储结果呢?甚至不需要位于数据库(Redis)中。协商的延迟可能是运行进程的时间间隔。
  • 在您的示例中,分页几乎不是业务决策问题。您只需要提供无限滚动和一些 Ajax 调用来获取缓存、聚合、排序的信息。这和DDD关系不大。
  • 您的 UI 工件以及聚合、排序过程似乎是非常独立的事情,与数据一起工作,或者更好的是,每个上下文的数据组件以所需的格式提供数据。
© www.soinside.com 2019 - 2024. All rights reserved.