据我了解,CQRS 的基本原则之一是命令应该以行为为中心,并且在业务或 UL 中具有价值,而不是以数据为中心,即 CRUD。我们没有专注于更新客户,而是使用诸如 CustomerHasMoved 之类的命令。如果您有用于更正某些数据的 CRUD 屏幕怎么办。例如,我们需要更改拼写错误的客户名称。这在业务中并没有太大的价值。这应该只是在 UpdateCustomer 命令的范围内吗?
问问题
5807 次
3 回答
38
我只想在它弹出时快速对此发表评论。
重要的是要注意某些对象实际上是 CRUD 并且没关系。我可能并不真正关心为什么在我将产品运送给人们并且只需要该数据来打印邮寄标签的域中名称会发生变化。诀窍在于将行为设置为默认值,然后在您确定您真的不关心原因时恢复到 CRUD 界面,反之亦然。
格雷格
于 2010-04-14T15:43:35.953 回答
18
实际上,更新客户姓名可能有多种原因。正如你所说,它可能拼写错误或者......你可以结婚并把你的名字改成你丈夫的名字。
如果您只有一个 UpdateCustomer 命令,您将失去最初的意图,并且您将无法为每个命令提供不同的行为。如果名字卖错了,它可能就像更新数据库一样简单,而如果您的客户结婚了,您可能需要通知营销部门,以便他们提供折扣。
如果您的实体是纯粹的 CRUD,即没有可以与修改属性相关联的意图,则可以使用 UpdateEntityCommand。然后你可以慢慢过渡到更基于任务的东西
于 2009-12-29T14:19:54.523 回答
0
CustomerHasMoved 是在您更新客户位置后触发的事件。此事件更新读取数据库/缓存数据库。来自 gui 的命令应该是 MoveCustomer 或类似的东西。我想我会将客户名称的更新放在像 UpdateCustomer 这样的命令中。
于 2009-12-22T10:33:07.417 回答