事件和命令消息中的元数据

时间:2012-11-27 19:12:32

标签: domain-driven-design cqrs

我很想知道你们如何在cqrs解决方案中整合有关命令/事件消息的元数据。例如,我想知道谁,何时,哪个主机等生成了命令。我不想把这些放在信息本身。

在网络应用中说,用户创建了购物车CreateShoppingCart { CartID, UserID }。然后向其添加了项目AddItem { CartID, ItemID, Amount, etc }。当用户点击“添加到购物车”按钮时,我想记录准确。

  1. 我可以将其添加到某个Dictionary<string, object> Headers { get; set; }属性中。该属性可以在BaseMessage类中。
  2. 我可以依赖消息传递框架(类似于NServiceBus)并将此数据添加到消息上下文中的消息头中。
  3. 发送此信息的单独命令。像LogCommandDetails { CommandID: 'id of AddItem command', DateTime, Some other meta data }这样的东西。处理完这个comamnd后,我可以更新ItemAdded事件的投影并将这些数据添加到投影中。
  4. 你有什么想法?

    由于

1 个答案:

答案 0 :(得分:2)

通常,此信息存储在邮件头中,即选项2.这正是邮件头的用途。请注意,消息传递框架的消息与域中的消息之间存在细微差别,消息是消息传递框架中消息的主体。

但是,很难辨别什么是数据,什么是元数据。我在日期等问题上遇到了这个问题。例如,是与事件元数据或适当的域数据相关联的时间戳吗?如果执行某些业务逻辑需要时间戳,该怎么办?在您的示例中,您是否需要记录报告或审核目的的日期,或者是域运行所需的日期?在前一种情况下,使用标题,在后者中,将日期放在邮件正文中。