我正在使用事件源实现有界上下文,但遇到了问题。假设我正在模拟一场足球比赛,我对个人进球(谁进球等)和总分都感兴趣。因此,如果我有一个 Match 聚合根,理想情况下我希望引发名为 GoalScored 和 ScoreChanged 的事件。我希望像这样从域中明确说明分数的原因是我不希望许多不同的侦听器和可能的其他有界上下文都计算相同的东西。
这看起来很简单,但是:Match 对象有一个添加新目标的 Goal() 方法。本着事件溯源的精神,这不会直接改变 Match 状态,而是引发一个 GoalScored 事件,该事件在 Match 中处理,然后改变状态(以及被推送到非规范化器的事件)。因此,就提高 ScoreChanged 而言,在处理 GoalScored 事件之前,分数实际上并没有改变,所以我是否应该引发另一个事件来响应该事件 (ScoreChanged),从而有效地链接事件?我不这么认为,首先,当从事件存储重新加载聚合根时,每次都会创建大量额外事件以响应每个 GoalScored。
我还考虑过在引发 GoalScored 的命令处理程序中计算得分,这是一种“假设”的情况。然后我可以在命令处理程序中引发这两个事件。不过,我真的不想那样做——它看起来并不“正确”。计算分数对于足球来说很简单,但其他游戏(例如板球)需要更多的工作。
我可以将目标和得分都放在 GoalScored 事件中,这很公平,但又似乎不对 - 得分与 GoalScored 事件本身无关。
讨论事件溯源时使用的所有示例似乎都使用电子商务客户/订单域,而我从未见过与此类似的案例。
有没有人有处理这种情况的经验?
谢谢