Mar*_*edy 10 cqrs event-sourcing
在研究了大量材料和示例之后,我目前正在开始第一次尝试DDD/CQRS/ES系统.
1)我已经看到了事件源代码示例,其中Aggregates是事件处理程序,并且每个事件的Handle方法是改变对象实例上的状态(它们为将改变状态的事件实现IHandleEvent <EventType>接口)
2)我还看到了一些例子,其中Aggregates看起来就像是对域建模的普通经典实体类.另一个事件处理程序类涉及改变状态.
当然,当从存储库调用重建聚合时,状态由事件处理程序在聚合上进行突变,该存储库调用获取该聚合的所有先前事件,并且当命令处理程序调用聚合上的方法时.虽然在后者中我看过事件在命令处理程序而不是聚合中发布的例子,但我确信这是错误的.
我的问题是方法(1)和(2)之间的利弊是什么
Cod*_*ler 11
接收/处理命令的工作与执行命令的工作不同.我采取的方法是有一个处理程序.它的工作是接收命令.该命令包含AggregateId,然后可以使用它来获取聚合的所有事件.然后,它可以通过LoadFromHistory方法将这些事件应用于聚合.这使聚合更新并使其准备好接收命令.所以我的简短版本是选项2.
我有一些你觉得有用的帖子,第一篇是典型的CQRS/ES应用程序流程概述.这不是它们应该如何经常出现的.您可以在CQRS上找到- 典型应用程序流程的循序渐进指南!
我还有一篇关于如何为CQRS和ES构建聚合根的帖子,如果这有用的话.您可以在Aggregate Root中找到- 如何为CQRS和事件采购构建一个
无论如何,我希望有所帮助.所有最好的构建您的CQRS/ES应用程序!