7

我想知道是否最好发布事件而不是从聚合中抛出异常。比如说,我有一个域,其中要求只有特定年级的学生才能报名参加体育运动。如果我对不满足条件的学生调用 EnrollForSports,聚合是否应该抛出异常或发布事件,特别是如果其他聚合或流程管理器对流程的结果感兴趣?

如果发布了一个事件,是不是意味着我们重放时需要相应的内部事件处理程序来处理该事件,即使该事件不会改变聚合的状态?

如果抛出异常,如何通知其他方?命令处理程序可以捕获异常然后引发事件吗?可以从命令处理程序中引发事件吗?

4

2 回答 2

5

这个问题一般不能回答。没有“最佳实践”,它真的取决于很多因素。

不过,最近刚刚在 DDD/CQRS 邮件列表中讨论了这个主题。阅读它,您可能会在那里找到一些有趣且有用的观点。

哦,这里有一篇关于该主题的博客文章:业务错误只是普通事件

于 2013-08-08T17:08:21.150 回答
5

原则上,一个命令应该要么有效且执行,要么无效且不执行。产生错误事件的想法使您处于中间位置,并且对发送命令的任何人的反馈都是模棱两可和延迟的。这也是您领域中不必要的复杂性。如果您抛出异常,它将立即反馈给发送命令的客户端代码。

于 2013-08-07T17:03:26.047 回答