Domain driven design 多个聚合根之间的分页

Domain driven design 多个聚合根之间的分页,domain-driven-design,paging,aggregateroot,Domain Driven Design,Paging,Aggregateroot,我是DDD的新手,所以如果某些术语/理解有误,请执行我。但请纠正我,任何建议都将不胜感激 假设我正在做一个社会工作委员会网站,我已经确定了我的聚合根:候选人、工作和公司。非常不同的内容/上下文,因此每个都有自己的数据库表、存储库和服务。但现在我必须建立一个Pinterest风格的主页,其中数据块显示候选人、工作或公司的数据 现在棘手的部分是,数据块必须在它所代表的聚合上最后一次发生事件之前排序(公司被喜欢/评论,或者作业被更新,等等),分页以无限滚动的形式出现,同样就像Pinterest一样。由

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

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

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

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

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

  • 分页是表示逻辑、业务逻辑还是持久性逻辑?哪个水平层
  • 跨境代码应位于DDD中的何处?哪个垂直堆栈

  • 我想到了几件事

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