我很想知道你们如何在cqrs解决方案中整合有关命令/事件消息的元数据。例如,我想知道谁,何时,哪个主机等生成了命令。我不想把这些放在信息本身。
在网络应用中说,用户创建了购物车CreateShoppingCart { CartID, UserID }
。然后向其添加了项目AddItem { CartID, ItemID, Amount, etc }
。当用户点击“添加到购物车”按钮时,我想记录准确。
Dictionary<string, object> Headers { get;
set; }
属性中。该属性可以在BaseMessage类中。LogCommandDetails { CommandID: 'id of AddItem command', DateTime, Some other meta data }
这样的东西。处理完这个comamnd后,我可以更新ItemAdded事件的投影并将这些数据添加到投影中。你有什么想法?
由于
答案 0 :(得分:2)
通常,此信息存储在邮件头中,即选项2.这正是邮件头的用途。请注意,消息传递框架的消息与域中的消息之间存在细微差别,消息是消息传递框架中消息的主体。
但是,很难辨别什么是数据,什么是元数据。我在日期等问题上遇到了这个问题。例如,是与事件元数据或适当的域数据相关联的时间戳吗?如果执行某些业务逻辑需要时间戳,该怎么办?在您的示例中,您是否需要记录报告或审核目的的日期,或者是域运行所需的日期?在前一种情况下,使用标题,在后者中,将日期放在邮件正文中。