【问题标题】:Paging among multiple aggregate root多个聚合根之间的分页
【发布时间】:2012-04-28 06:42:49
【问题描述】:

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

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

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

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

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

  1. 是分页表示、业务还是持久性逻辑?哪个水平层?
  2. 跨界代码应该驻留在 DDD 中的什么位置?哪个垂直堆栈?

【问题讨论】:

    标签: domain-driven-design paging aggregateroot


    【解决方案1】:

    我想到了几件事。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 2013-12-11
      • 2020-01-30
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多