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,并使用报告查询在您的命令中查找相关数据以查找名称。
如果不是不同的聚合,则组名可用不会违反此类问题。
我还要争论以上是否是最佳实践指南,没有银锤。或者,更清楚一点,如果您真的需要组名,请将其传入。