Domain driven design 从事件存储中的事件流推断用户意图。这是正确的做法吗?
我们使用的是一个事件存储,它存储单个聚合-用户订单(想象一下,亚马逊订单可以在实际发送之前由客户或电子商务公司的某个人随时更新) 这是我们第一次允许公司员工查看订单的历史记录,因为到目前为止,他们只能看到订单的当前状态 我们现在意识到,组成聚合根的事件并没有真正显示用户的意图或实际操作。当顺序应用于空订单时,它们仅用于构建订单的当前状态。问题是:他们应该这样做吗Domain driven design 从事件存储中的事件流推断用户意图。这是正确的做法吗?,domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,我们使用的是一个事件存储,它存储单个聚合-用户订单(想象一下,亚马逊订单可以在实际发送之前由客户或电子商务公司的某个人随时更新) 这是我们第一次允许公司员工查看订单的历史记录,因为到目前为止,他们只能看到订单的当前状态 我们现在意识到,组成聚合根的事件并没有真正显示用户的意图或实际操作。当顺序应用于空订单时,它们仅用于构建订单的当前状态。问题是:他们应该这样做吗 想象一个用户最初拥有一本书X,然后将其删除并再次添加2本。我们是否认为这是一个事件“用户添加1本书”或事件“用户删除1本书”+“用户添
谢谢命令名最好是用来描述意图的。这意味着可以创建事件名称,以明确原始意图。根据经验,事件流中的事件对于业务的相关成员来说应该是可以理解的。这是一条很好的经验法则。它应该包含“cartUpdated”等内容
考虑到上述情况,我本以为显示事件流的效果应该很好。但我完全明白为什么它在某些情况下可能并不理想。也就是说,它可能太详细了。在这种情况下,可能会创建一个为事件提供信息的“Summerser”读取模型。通常会在生成的事件元数据中包含命令ID,以及可选的关联ID(对长时间运行的进程有用)。这样就更容易构建订单历史投影。或者,您可以使用事件时间戳以您想要的任何方式关联批次(如果在短时间内发生多个命令,您可能只需要一个条目)。事件(过去时)并不总是捕获人类或系统用户意图。命令(祈使语气)可以。由于所有命令数据都无法从它生成的事件中轻松地追溯,因此在这里保存命令的结构化日志看起来是一个不错的选择