Domain driven design DDD/CQRS:在哪里持久化

Domain driven design DDD/CQRS:在哪里持久化,domain-driven-design,cqrs,Domain Driven Design,Cqrs,我们最近开始使用DDD和CQR(无事件源)的概念开发应用程序。我仍然有点困惑,到底应该在哪里调用存储库来持久化我的聚合根 我是在命令处理程序中还是在事件处理程序中执行此操作?您可以在命令处理程序中执行此操作。将域对象保存为普通对象。即使您没有使用事件源作为持久化域实体的方法,您仍然需要触发查询服务将订阅的事件。然后,读取端的事件处理程序将更新为UI屏幕定制的非标准化表。因此,基本上您有两组数据访问代码:一组用于域,一组用于查询服务(读取端)。如果您使用事件源来持久化您的域实体,工作就会少一些…谢

我们最近开始使用DDD和CQR(无事件源)的概念开发应用程序。我仍然有点困惑,到底应该在哪里调用存储库来持久化我的聚合根


我是在命令处理程序中还是在事件处理程序中执行此操作?

您可以在命令处理程序中执行此操作。将域对象保存为普通对象。即使您没有使用事件源作为持久化域实体的方法,您仍然需要触发查询服务将订阅的事件。然后,读取端的事件处理程序将更新为UI屏幕定制的非标准化表。因此,基本上您有两组数据访问代码:一组用于域,一组用于查询服务(读取端)。如果您使用事件源来持久化您的域实体,工作就会少一些…

谢谢。在长时间运行的“事务”(Sagas?)的情况下,这些事务最终是否也应该抛出命令?其次,我假设命令不一定必须来自用户界面,对吗?没错,命令的发布不是UI独有的。Saga可以发布命令,事件处理程序也可以。后者的一个典型示例是更新查询失败,需要发出一个补偿命令来撤消原始命令。