CQRS:您如何检索有关已执行命令的信息?

标签 cqrs

在我见过的大多数命令界面中,通常有一个“执行”方法,它接受命令输入并返回 void 或一些指示命令是否成功执行的通用结构(我们正在使用后者)。现在,我以前从未想过这一点,但我们突然需要了解一些有关命令结果的详细信息,而不是您通常可以公开的内容。

考虑以下示例:

您有一个团队,并且您正在创建一个屏幕,您可以在其中将成员添加到您的团队中。团队成员显示在“添加新成员”下方的网格中。现在,当您按下“添加新成员”时,您想要运行一些 jquery/roundohuse/whatever 并将新成员添加到团队成员列表中。到目前为止没有问题,但是:您还希望在每个成员的隐藏字段中包含一些标识数据,并且此 id 数据来自服务器。

所以问题是:如何从服务器获取该 id 数据?我正在通过“ExecuteCommand”方法推送的“AddNewTeamMember”命令没有给我任何有用的信息,如果我向服务添加一个新的查询方法,例如:“GetLastAddedTeamMember”,那么我可能只会得到最后一个条目由其他人添加(至少如果这是由不同用户非常积极地添加的数据)。在某些情况下,您可以在客户端生成一个自然的唯一标识符,我们可以使用它,但对于团队成员,我们没有。

最佳答案

鉴于您别无选择,只能在另一个命令完成时更新页面小部件,我为您提供了两种选择:

  • 关闭命令,在本地显示一些表明它已提交的内容,然后等待直到您从服务器收到团队成员列表已更改的通知。更新小部件以反射(reflect)这一点。
  • 在您提交命令时将相关 ID 添加到您的命令,并将团队成员临时本地添加到列表中。当您从服务器收到确认由于您的关联 ID 发生了团队成员更新时,请更新您的本地数据。

  • 我会建议第一种方法,其中“临时指标”可以将正常指示的标记版本放入到位;然后,当您最终获得更新时,您应该拥有所需的数据。

    鉴于您使用 CQRS 来解决这个问题,我假设您已经在后台频繁更新这些小部件的内容,因此大概已经解决了“后台更新”问题。

    如果没有,我建议您要么放弃 CQRS 作为问题空间中一个糟糕的 - 过于复杂 - 的解决方案,要么首先解决后台更新问题。

    关于CQRS:您如何检索有关已执行命令的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307267/

    相关文章:

    spring-boot - org.axonframework.eventsourcing.IncompatibleAggregateException(轴突框架 : Aggregate identifier must be non-null after applying an event)

    mvvm - 使用 ViewModel 代替 DTO 作为 CQRS 查询的结果

    domain-driven-design - DDD - 使用在整个系统中必须唯一的联系信息对用户进行建模

    c# - MediatR 库 : following the DRY principle

    domain-driven-design - 我应该使用 Command 在 CQRS 中实现域派生吗

    c# - 无法跟踪实体类型 'x' 的实例,因为已在跟踪键值为 '{Id: 6}' 的另一个实例

    CQRS - EventListener 可以调用命令吗?

    domain-driven-design - 将 CQRS 命令直接传递给域对象

    .net - 消息处理程序的生命周期

    unit-testing - 生成的 akka 持久性 actor 测试事件