我正在第一次尝试使用 CQRS 和事件溯源,我有几点我想要一些指导。我想实现一个 SO 风格的声誉系统。这似乎非常适合这种架构。
以 SO 为例。假设一个问题被投票,这会产生一个UpvoteCommand
增加问题总分的问题并触发一个QuestionUpvotedEvent
。
似乎作者的用户聚合应该订阅QuestionUpvotedEvent
可以增加信誉分数的。但是我不清楚您如何/何时进行此订阅?在 Greg Youngs 示例中,事件/命令处理连接在 global.asax 中,但这似乎不涉及任何基于聚合 Id 的路由。
似乎每个用户聚合都会订阅每个QuestionUpvotedEvent
看起来不正确的信息,为了使这样的方案工作,事件处理程序必须表现出行为来识别该用户是否拥有刚刚被投票的问题。Greg Young 暗示这不应该出现在事件处理程序代码中,它应该只涉及状态更改。
我在这里做错了什么?
非常感谢任何指导。
编辑
我想我们在这里谈论的是问题和用户聚合之间的聚合间通信。我可以看到的一个解决方案是QuestionUpvotedEvent
由 a 订阅,ReputationEventHandler
然后可以获取相应的用户 AR 并在该对象上调用相应的方法,例如YourQuestionWasUpvoted
. 这将反过来生成用户特定的UserQuestionUpvoted
事件,从而在未来保留重播能力。这是朝着正确的方向前进吗?
编辑 2
另请参阅此处关于 google 群组的讨论。