【问题标题】:Meta data in event and command messages事件和命令消息中的元数据
【发布时间】:2012-11-15 11:51:53
【问题描述】:

我很想知道你们是如何将有关命令/事件消息的元数据整合到 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 } 这样的东西。处理此命令后,我可以更新 ItemAdded 事件的投影并将此数据添加到投影中。

你有什么想法?

谢谢

【问题讨论】:

    标签: domain-driven-design cqrs


    【解决方案1】:

    通常,此信息存储在消息标头中,这是选项 2。这正是消息标头的用途。请注意,从消息传递框架的角度来看的消息与域中的消息之间存在细微差别,域中的消息是消息传递框架中的消息主体。

    但是,很难辨别什么是数据,什么是元数据。除其他事项外,我遇到了日期问题。例如,时间戳是否与事件元数据或适当的域数据相关联?如果执行某些业务逻辑需要时间戳怎么办?在您的示例中,您是否需要记录日期以用于报告或审计目的,还是域运行所需的日期?在前一种情况下,使用标头,在后一种情况下,将日期放在消息正文中。

    【讨论】:

    • 建议您确定此信息的用途:如果域相关,则应成为消息的一部分。如果没有,标题(#2)应该可以工作。如果理解正确,这是有道理的。谢谢!
    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2018-12-15
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多