据我所知,CQRS的基本原则之一是命令应该是以行为为中心的,并且在业务或UL中具有价值,而不是以数据为中心,即CRUD。而不是专注于更新客户,我们有像CustomerHasMoved这样的命令。如果你有CRUD屏幕,用来纠正某些数据,那该怎么办?例如,我们需要更改拼写错误的客户名称。这在业务中并没有多大价值。这应该只是在UpdateCustomer命令的保护伞下吗?
发布于 2009-12-29 22:19:55
实际上,可能有各种原因需要更新客户的姓名。就像你说的,可能拼错了或者...你可以结婚,然后改你丈夫的名字。
如果你只有一个UpdateCustomer命令,你将失去最初的意图,并且你将不能对每个命令都有不同的行为。如果名字卖错了,可以像更新数据库一样简单,而如果你的客户结婚了,你可能需要通知营销部门,以便他们可以提供折扣。
在实体纯粹是CRUD的情况下,也就是说,您没有可以与修改属性相关联的意图,那么可以有一个UpdateEntityCommand。然后,您可以慢慢过渡到更多基于任务的内容
发布于 2010-04-14 23:43:36
我只想在它弹出的时候快速地对此发表评论。
需要注意的是,有些对象实际上是CRUD,这没问题。我可能并不真正关心为什么我的域名会发生变化,因为我将产品发送给人们,只需要这些数据来打印邮件标签。诀窍在于将行为设置为缺省,然后在确定确实不关心原因时恢复到CRUD接口,反之亦然。
格雷格
发布于 2009-12-22 18:33:07
CustomerHasMoved是在您更新客户位置后触发的事件。此事件更新读取数据库/缓存数据库。来自gui的命令应该是MoveCustomer或类似的内容。我想我会把客户名称的更新放在像UpdateCustomer这样的命令中。
https://stackoverflow.com/questions/1883107
复制相似问题