CQRS,应该命令/事件参数包含我们需要的一切

本文关键字:我们 包含 参数 命令 事件 CQRS | 更新日期: 2023-09-27 18:04:02

我的应用程序使用CQRS,我有一个情况,我有一个命令"AddApplicationToGroupCommand"与以下参数:

class AddApplicationToGroupCommand
+ Guid GroupId; // AggregateRootId
+ string ApplicationName;

这个命令通过我的聚合,然后发布一个事件;在我的EventHandler中处理,并最终保存在我的数据库中。

我的问题是关于最佳实践的。最后我想要的是我的EventHandler在表应用程序中插入以下参数
Table Applications
int ApplicationId
varchar(255) ApplicationName
varcher(255) GroupName

如你所见,当我要插入表时,我需要GroupName。因此,为了做到这一点,我有两种方法来做到这一点。

或者我像上面那样传递groupId,然后在我的EventHandler中,我必须查询Group表以检索groupId的名称。要么我在上面的命令参数中传递GroupName,然后在我的eventHandler中我可以直接执行

myContext.Applications.Insert(applicationName, groupName)

CQRS怎么说?

谢谢。

CQRS,应该命令/事件参数包含我们需要的一切

我建议更多的是关于你的领域,而不是CQRS。

如果您遵循DDD,那么它将依赖于聚合-组是单独的聚合吗?如果是这样,那么是的,您将处理id(通常),并将使用Reporting查询在命令中查找相关数据以查找名称。

如果它不是一个不同的聚合,那么使用组名就不会违反这些问题。

我也会争论以上是否为最佳实践指南,没有银锤。或者,更清楚地说,如果您确实需要组名,可以传入。