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

时间:2011-11-29 07:31:48

标签: cqrs

在我看过的大多数命令接口中,通常有一个“Execute”方法,它接受命令输入并返回void或一些通用结构,指示命令是否成功执行(我们使用后者)。现在,我以前从未想过这个,但是我们突然需要了解一些关于命令结果的更多细节,而不是一般的暴露。

考虑以下示例:

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

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

2 个答案:

答案 0 :(得分:3)

鉴于你别无选择,只能在另一个命令完成时更新页面上的小部件,我会看到两个选择:

  1. 关闭命令,在本地显示一些表明已提交的内容,然后等待,直到您收到服务器通知团队成员列表已更改的通知。更新小部件以反映该内容。

  2. 在提交命令时为您的命令添加相关ID,并将团队成员临时添加到列表中。当您从服务器收到由于您的相关ID而发生团队成员更新的确认时,请更新您的本地数据。

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

    鉴于您使用CQRS来解决此问题,我假设您已经经常更新后台发生的那些小部件的内容,因此可能解决了“后台更新”问题。

    如果没有,我建议您在问题空间中抛弃CQRS作为一个过于复杂的解决方案,或者首先解决后台更新问题。

答案 1 :(得分:0)

如果要添加现有团队成员,则应查询应用程序的读取端以获取此数据。如果您需要添加新的团队成员,则必须考虑是否有必要立即在下面的网格中显示用户。你能等到团队成员在阅读方面到位吗?您还可以在服务器端查询服务以获取唯一ID(它可以返回GUID)。然后将团队成员添加到网格中,当然,将命令发送到服务器。但是,如果可能的话,尝试以一种您不必立即向团队成员展示的方式设计应用程序。也可以给用户一个这样的消息:“团队成员已添加,等待来自服务器的响应。”。然后使用AJAX查询新队员的阅读方。当它出现在读取侧时,将其显示在网格中。您可能需要与其他用户添加的团队成员打交道,但这有关系吗? CQRS为您提供了与其他用户协作的绝佳方式,因此您可能应该利用这一点。照我看来; CQRS迫使你思考不同,这可能不是一件坏事。