CQRS任务UI - 响应基础更改

时间:2011-12-15 17:38:23

标签: user-interface cqrs

作为我的CQRS实施的一部分,已经进入面向任务的UI。

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

我的情况有所不同,但这是一个例子...... 例如。 CommandA将项目添加到购物车会导致以下事件(所有这些都需要在UI上反映出来)

  • 更改为商店库存
  • 将商品添加到购物车
  • 使用销售税更改总计

在不将我的业务逻辑融入我的UI的情况下,处理此问题的最佳方法是什么?

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

2 个答案:

答案 0 :(得分:1)

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

SignalR尚未成熟,但我所做的测试效果非常好。

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

答案 1 :(得分:1)

这些事件真的需要在UI中反映出来吗?考虑亚马逊,他们显示“你刚刚将foo添加到购物车中”,但没有显示任何其他细节。这可以通过重新定义它来避免问题。

否则,您为什么害怕“UI”中的业务逻辑 - 具体而言,为什么不在客户端中包含该系统的每个部分的服务中的某些组件,并让他们负责执行任何本地更新合适?

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

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

例如,重新计算运费需要时间 - 如果您的客户端显示一个微调器,需要知道某些事情会触发显示,对吗?

如果您的UI知道这一点,那么它就会围绕流程嵌入业务流程。另一方面,如果您的代码是“送货”服务的一部分,您可以通过仅更改一个服务来更改客户端中发生的响应......