0

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

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

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

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

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

  1. 是分页呈现、业务还是持久化逻辑?哪个水平层?
  2. 跨界代码应该在 DDD 中的哪个位置?哪个垂直堆栈?
4

1 回答 1

0

有几件事浮现在脑海。

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