关于 c#:CQRS,命令/事件参数是否应该包含我们需要的所有内容?

CQRS, should commands/events parameters contains everything we need?

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

1
2
3
class AddApplicationToGroupCommand
+ Guid GroupId; // AggregateRootId
+ string ApplicationName;

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

我的问题是关于最佳实践的。我最终想要的是我的 EventHandler 使用以下参数插入表应用程序

1
2
3
4
Table Applications
int ApplicationId
varchar(255) ApplicationName
varcher(255) GroupName

如您所见,当我要在表中插入时,我需要 GroupName。所以为了做到这一点,我前面有两种方法。

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

1
myContext.Applications.Insert(applicationName, groupName)

CQRS 怎么说?

谢谢大家。

[已编辑以进一步说明我的目标]


我建议它更多地与您的域有关,而不是 CQRS。

如果您关注 DDD,那么它将取决于聚合 - 组是单独的聚合吗?如果是这样,那么是的,您将(通常)处理 Id,并使用报告查询在您的命令中查找相关数据以查找名称。

如果不是不同的聚合,则组名可用不会违反此类问题。

我还要争论以上是否是最佳实践指南,没有银锤。或者,更清楚一点,如果您真的需要组名,请将其传入。