CQRS 使用条件变量的单个命令或多个专用命令

问题描述 投票:0回答:1

对于每个条件,cqrs 中应该有单个还是多个命令?示例:如果有命令

GenerateAndSendReportToClient
并且可以通过
SSN
TaxNumber
找到客户端,是否应该有单个命令
GenerateAndSendReportToClientClient
,该命令的用户可以提供两个字段中的任何一个
SSN
TaxNumber
并且在命令处理程序中,存在逻辑来确定提供的内容以及如何从存储库中获取
Client
DomainEntity(即使用哪种方法,
FindBySsn()
FindByTaxNumber()
),或者两个单独的命令
GenerateAndSendReportToClientBySsn
GenerateAndSendReportToClientByTaxNumber
在命令处理程序中没有分支逻辑。拥有单独的命令意味着存在逻辑重复,并且可能会有一些包含它的“内部”命令处理程序,并使用一些委托来选择调用哪个以及如何调用存储库方法。

domain-driven-design cqrs
1个回答
0
投票

这可能是一个令人困惑的问题,因为

GenerateAndSendReportToClient
听起来更像是 CQRS 查询消息而不是 CQRS 命令。 是的,我们肯定要求系统做一些事情,但是我们要求机器做的事情并不涉及对系统“记录簿”进行更改。

(可能 - 这里的部分困难是消息的名称没有告诉我们任何有关其语义的信息,因此尝试回答这个问题有点像在遗留代码中工作,试图猜测“原始程序员”的意图).

也就是说......在设计消息模式时,它是一路权衡的。 使用一条消息充当“GenerateReport”信号并没有本质上的错误,消息架构中具有许多可选元素,这些元素在生成报告时描述各种过滤器的参数(与 SQL 查询是“消息”,其中包含一个可选的 WHERE“元素”,可让您缩小结果范围”)。

© www.soinside.com 2019 - 2024. All rights reserved.