CQRS和CRUD屏幕

时间:2009-12-10 18:40:34

标签: domain-driven-design cqrs

据我所知,CQRS的基本原则之一是命令应该是以行为为中心的,并且在业务或UL中具有价值,而不是以数据为中心,即CRUD。我们没有专注于更新客户,而是拥有像CustomerHasMoved这样的命令。如果你有CRUD屏幕可以纠正某些数据怎么办?例如,我们需要更改拼写错误的客户的名称。这在业务中并没有多大价值。这应该只是在UpdateCustomer命令的保护伞下吗?

3 个答案:

答案 0 :(得分:38)

我只想在弹出时快速对此发表评论。

重要的是要注意一些对象实际上是CRUD,没关系。我可能不太关心为什么名称在我的域名中发生变化,我将产品发送给人们并且只需要该数据来打印邮件标签。诀窍是让行为成为默认行为,然后一旦你确定你真的不关心原因而反过来就回复到CRUD界面,反之亦然。

格雷格

答案 1 :(得分:18)

实际上,更新客户名称可能有多种原因。正如你所说的那样,它可能拼写错误,或者......你可以结婚并改变你丈夫的名字。

如果您只有一个UpdateCustomer命令,那么您将失去原始意图,并且您将无法为每个命令执行不同的行为。如果名称是错误的,它可能就像更新数据库一样简单,而如果您的客户结婚,您可能需要通知营销部门,以便他们可以提供折扣。

如果您的实体纯粹是CRUD,那么您无意与修改属性相关联,那么可以使用UpdateEntityCommand。然后,您可以慢慢转换为更基于任务的内容

答案 2 :(得分:0)

CustomerHasMoved是更新客户位置后触发的事件。此事件更新读取数据库/缓存数据库。来自gui的命令应该是MoveCustomer或类似的东西。我想我会将客户名称的更新放在像UpdateCustomer这样的命令中。