我正在尝试学习并将CQRS设计方法(模式和架构)应用于新项目,但似乎缺少关键部分。
我的客户端应用程序执行查询并从读取模型中检索文档列表(带有连接)。用户选择一个项目并单击按钮以启动某个操作。通过创建相应的命令对象并将其发送到写模型(命令处理程序执行操作,通过读取模型更新数据存储等)来执行操作。但是,在某些时候,我需要更新UI以反映由操作产生的应用程序状态的更改。
在没有完成投影的情况下,我无法获取插入/更新的数据并通过实时套接字发送回UI。一个解决方案,我可以发送相同聚合和aggregateId的状态但是在连接的情况下,我怎样才能将完整更新(带有连接的数据)发送到UI?
您有一些更新UI的选项。
如果可能,如果您的API同步返回成功/失败,则会更容易。如果出现故障,您可以立即向用户报告,而无需更新UI。如果你取得了成功,你有一些选择。
除了这些选项之外,您还可以使用乐观更新技术。在这种情况下,在发出命令之前进行适当的客户端检查后,您立即假设命令成功(如果这是通常成功的命令类型),请立即使用客户端代码更新UI。然后:
这也适用于离线支持 - 您在客户端中持久排队命令,并乐观地假设它们成功(可能具有UI指示您处于脱机状态且数据过时),使用客户端代码更新读取模型,直到您实际上可以将命令发送到服务器并重新获取服务器生成的读取模型。