CQRS和CRUD屏幕

blo*_*ead 21 domain-driven-design cqrs

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

Gre*_*ung 38

我只想在弹出时迅速对此发表评论.

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

格雷格


Jul*_*ien 18

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

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

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

  • 是的,或者至少对于您想要处理的每个场景.在我的示例中,您将从CorrectMisspelledCustomerName开始,然后,如果需要,您将添加MakeCustomerMarried命令.CQRS是关于行为,而不是关于更新数据.因此,您不应该使用通用命令来更新系统中的内容 (8认同)
  • 您可能不应该一次以可编辑的方式显示所有字段,但具有"基于任务"的UI.IE仅在用户选择他打算执行的操作后显示字段 (3认同)
  • 我是朱利安的第二个回答.基于任务的UI绝对是CQRS推动的目标.不要太忙于为每一项任务设置屏幕.包含所有客户字段的大屏幕可能仍然存在,例如呼叫中心人员希望能够在一个快速的糖果中看到所有字段.但这种观点应该只读.所有更新都可以是特定于上下文的(标记为已读,升级,正确的名称等). (2认同)