Architecture 存储其他BC使用的统计数据的CQR';s

Architecture 存储其他BC使用的统计数据的CQR';s,architecture,domain-driven-design,cqrs,Architecture,Domain Driven Design,Cqrs,在我们当前的应用程序中,用户需要能够看到其帐户中的某些统计信息。这些数据以事件的形式来自不同的有界上下文。它们通常由计数器组成,如跟踪的总距离。一些用户绑定的统计数据也用于报告和图表。我的问题是在哪里存储用户绑定的统计数据。比如,它们是域模型(用户聚合)的一部分吗?或者它们只是一个最终在多个地方更新的具体化视图 因此,要使用物化视图进行可视化: /-> [User View updater] [BC1] --&

在我们当前的应用程序中,用户需要能够看到其帐户中的某些统计信息。这些数据以事件的形式来自不同的有界上下文。它们通常由计数器组成,如跟踪的总距离。一些用户绑定的统计数据也用于报告和图表。我的问题是在哪里存储用户绑定的统计数据。比如,它们是域模型(用户聚合)的一部分吗?或者它们只是一个最终在多个地方更新的具体化视图

因此,要使用物化视图进行可视化:

                                        /-> [User View updater]
[BC1] --> SomeInterestingToCountEvent1 <
                                        \-> [Report View updater]

                                        /-> [User View updater]
[BC2] --> SomeInterestingToCountEvent2 <
                                        \-> [Report View updater]
/->[用户视图更新程序]
[BC1]-->CountEvent1的一些有趣内容<
\->[报告视图更新程序]
/->[用户视图更新程序]
[BC2]-->CountEvent2的一些有趣的内容<
\->[报告视图更新程序]
或者通过在用户中设置统计值对象:

[BC1] --> SomeInterestingToCountEvent1 ---> [User Saga: update Stats]
[BC2] --> SomeInterestingToCountEvent2 ---> [User Saga: update Stats]

                                        /-> [User View updater]
[User BC] --> UserStatsUpdatedEvent    <
                                        \-> [Report View updater]
[BC1]-->SomeInterestingToCountEvent1-->[用户传奇:更新统计信息]
[BC2]-->SomeInterestingToCountEvent2-->[用户传奇:更新统计信息]
/->[用户视图更新程序]
[用户BC]-->UserStatsUpdatedEvent<
\->[报告视图更新程序]
在我们当前的应用程序中,用户需要能够看到其帐户中的某些统计信息。这些数据以事件的形式来自不同的有界上下文

因此,您可能需要考虑复合UI

  • 乌迪·达汉:
  • 吉米·博加德:
我的问题是在哪里存储用户绑定的统计数据。比如,它们是域模型(用户聚合)的一部分吗?或者它们只是一个最终在多个地方更新的具体化视图


您可能希望将其视为一个或多个具体化视图。

由任何相关事件的听众生成和更新的具体化视图。

谢谢!我的问题有点复杂。我无法拆分UI,因为计数器用于对列表中的对象进行排序。请参阅OPC中的“我的编辑”。但是,由于存在基于其他BC相同事实的多个统计视图(图表、总计),让saga更新用户的统计,这不是更容易吗?这最终会产生一个
UserStatsUpdatedEvent
,因此多个视图可以基于这些事件并查询用户服务(到那时,新计数器是最新的)。当然可以,但如果使用事件:-saga不知道统计信息,因此,统计要求的更改不会影响saga的设计-如果事件以队列形式发送,您可以在单独的节点上使用处理程序来更新统计数据-这将更加高效。我认为反对使用saga的另一个理由是,每当统计值更改时,它将导致UserStatUpdate事件。这将隐含地增加用户的事务占用空间。我想补充的唯一警告是-您需要非常小心事件顺序和重复,特别是如果您使用的事件总线不能保证单次交付。