CQRS任务UI——响应底层更改



作为我的CQRS实现的一部分,一直在转向一些面向任务的UI。

问题是我遇到了需要更新我的UI中的其他属性,因为从同一个UI发送的初始命令所做的更改。

我的情况是不同的,但这里有一个例子…如。命令将商品添加到购物车导致以下事件(都需要反映在UI上)

  • 更改存储库存
  • 将商品添加到购物车
  • 含销售税变动总额

在不将业务逻辑放入UI的情况下处理这个问题的最佳方法是什么?

  • 返回作为初始命令结果执行的结果事件列表?
  • 返回反映更改的DTO
  • 其他想法?

我还没有完成它,但我的想法是使用SignalR框架中的Hub并订阅事件并对其进行操作。只要你能将用户指南与SignalR中已连接的用户指南相关联,你就可以将更新发送到正确的客户端,甚至检测它们是否仍然存在。

SignalR还没有那么成熟,但我所做的测试工作得很好。

我使用它与Knockoutjs,我只是更新我的视图模型和调用函数。

这些事件真的需要反映在UI中吗?以亚马逊为例,它显示"您刚刚向购物车添加了foo",但不显示任何其他细节。这样可以通过重新定义它来避免这个问题。

否则,为什么你害怕"UI"中的业务逻辑——具体来说,为什么不包括一些来自服务的组件,这些组件拥有客户端系统的每个部分,并赋予它们做任何适当的本地更新的责任?

换句话说,在UI中运行销售税服务的部分逻辑是可以的。你(显然)不相信它能计算出税单,但你完全可以相信它能为客户做正确的事情。

该模型的另一个优点是您可以为用户获得即时反馈,或者至少可以选择显示即时反馈,而无需向客户端灌输更多的业务流程知识。

例如,重新计算运输需要时间——如果你的客户端在上面显示了一个旋转器,需要知道一些东西来触发它的显示,对吗?

如果您的UI知道这一点,则它在该流程周围嵌入了业务流程。另一方面,如果您的代码是"shipping"服务的一部分,您可以通过仅更改一个服务来更改客户端中发生的响应…

最新更新