首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确地保存和显示来自多个聚合体的信息?

如何正确地保存和显示来自多个聚合体的信息?
EN

Stack Overflow用户
提问于 2021-11-19 14:05:16
回答 2查看 203关注 0票数 0

我在创造一个销售平台。核心聚合称为公告,它保存对其他聚合(如类别、用户等)的引用。我正在使用CQRS方法作为一个事件源解决方案作为存储。

出于性能原因,我决定在公告聚合中存储一些有关相关对象(类别、用户)及其I的重要细节。我的理由是,在过滤公告时,我希望尽可能简化对这些信息的访问(减少数据库连接的数量,允许花哨的查询语法)。这是可能的,因为我在命令中包含了所有所需的信息,这将创建一个公告。生成公告的详细视图是基于聚合中嵌入的信息。虽然一开始看上去是合理的,但现在我有了新的想法。

我认为的考虑因素是:

  • --我意识到,我不需要所有附加细节(类别、卖方细节等)上的事务一致性。没有任何约束会迫使我做我所做的事。

我使用的事件存储库

  • 提供了多流投影。我想知道这是否是应该替换公告聚合中的冗余信息的拼图。

以下步骤是否是所描述问题的有效解决方案?

从公告aggregate;

  • Use (一个域事件)中删除重复的信息,通知其他聚合有关创建Announcement;

  • Let --其他聚合--发布响应于AnnouncementCreated事件的适当事件;这些事件可能包含有关关联的objects;

  • Introduce (一种多流投影)的附加信息,这将响应来自多个聚合体的事件而更新自身,并生成announcement;

的完整视图。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-19 15:31:26

通常,在特定聚合中包含数据的唯一原因是该数据是否影响命令验证,或者是否存在其他一致性需求。如果关于类别或用户的信息在任何一个原因下都没有限定,那么将其从公告聚合中删除是非常有意义的。

我可能会考虑建模一个“分类和相关的公告”聚合,它是由公告/类别/用户聚合提供的域事件提供的。这可以通过事件存储中的多流投影来实现,但我认为将这些细节分开是有用的,因为还有其他方法可以将来自多个聚合的域事件作为不同聚合的命令(任何事件中隐含的命令是“将此事件合并到您的世界视图中”)。

票数 1
EN

Stack Overflow用户

发布于 2021-11-20 07:32:05

决不要通过考虑如何读取数据来设计聚合。这违背了CQRS的目的。聚合是关于命令和业务规则,而不是查询。使用事件从多个聚合收集数据,然后在不影响聚合的情况下任意投影数据。这个概念被称为“投影”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70036104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档