Domain driven design 在CQRS/事件源中,是否所有数据都需要在命令和事件中?
假设我有一个围绕CQRS事件源的基础构建的应用程序:Domain driven design 在CQRS/事件源中,是否所有数据都需要在命令和事件中?,domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,假设我有一个围绕CQRS事件源的基础构建的应用程序: 应用程序调度命令由命令处理程序处理的DTO 在传递和应用命令的数据时聚合引发事件 事件处理程序在接收到他们感兴趣的事件时应用域逻辑和副作用(在我的例子中:它们进行投影) 我的问题是:在步骤1和3中,我们是否需要在命令和事件DTO中提供所有信息,或者我们是否可以传递处理程序可以从数据库中获取的某些实体的ID 示例: 我有一个员工总数 一个registereemployee命令 员工登记的事件 员工聚合有名字、姓氏、电子邮件和一些VO,如地址
- 我有一个员工总数
- 一个registereemployee命令
- 员工登记的事件
这就是为什么我可以想象有一个命令保存“just persistend”实体id,以避免在命令中复制实体的字段,并减轻管道。域模型/设计中出现了一些问题。让我退一步,勾勒出理想的方式,以便您可以绘制缺失的片段
包含员工聚合的所有数据输入registereemployee命令
从前端接收命令员工应用程序服务
初始化员工应用程序服务
,最好借助工厂方法员工聚合
在成功验证和构造新员工对象时引发Employee Aggregate
EmployeeRegistered事件
在Employee应用程序服务
Employee Repository
在持久性事务成功后被调度到MessageBrokerEmployeeRegistered事件
包含订阅者所需的整个数据集EmployeeRegistered事件
可能位于同一个有界上下文(BC)或不同的BC中此事件的订户
在他们自己的BC中捕捉事件并呼叫相关的感兴趣的订阅者
应用程序服务
初始化基础架构服务并执行事务(在您的情况下,这些是预测)应用程序服务
事件处理程序中不应该有域逻辑。您能澄清一下吗:我不能只在命令中提供基本字段(firstname、lastname、email)并传递工作者实体ID,以便RegisterEmployee命令处理程序可以在数据库中检索要传递给聚合的电话和地址字段吗?-假设您是第一次注册员工(比如说从某种形式上),所有关于员工的数据都应该作为表单数据来提供。否?您将从哪个数据库获取数据?评论不错,缺少一些信息。我编辑了我的问题。