【发布时间】:2013-10-11 04:48:28
【问题描述】:
在 CQRS 中,我们将命令和查询分开。据我了解,命令引发可能修改实体状态的域事件,而查询直接从数据存储返回查看特定 DTO。根据this article,用户界面通过命令总线发出命令,命令总线创建由各自的命令处理程序处理的命令,然后协调域逻辑以确定域事件的发生并将任何状态更改保持/发布到存储库(可选地使用事件溯源)。持久化后,状态更改可通过查询获得。
现在,如果命令创建的实体不会立即持久化/发布,该怎么办?首先,那个尚未持久化的实体在哪里?它是在命令总线、命令处理程序、存储库中,还是应该由一个新的瘦应用层来持有? Query 应该如何访问它?
这里的问题是,对于非持久化实体的任何查询似乎都与持久化实体的查询有很大不同,除非 CQRS 要求 ALL 实体在创建时持久化,这 IMO 不一定与所有实体兼容域。
具体来说,我正在尝试构建软件来记录各种培训课程的培训信息。但是,如果培训课程通过保存课程按钮手动而不是始终在创建时保留,我希望它。我不知道 StartNewTrainingSessionCommand 会将新的培训课程存储在哪里,以便可以查询它(如果不在数据存储中)。
【问题讨论】: