作为我的CQRS实施的一部分,已经进入面向任务的UI。
问题是由于从同一UI发送的初始命令所做的更改,我遇到了更新UI中其他属性的需要。
我的情况有所不同,但这是一个例子...... 例如。 CommandA将项目添加到购物车会导致以下事件(所有这些都需要在UI上反映出来)
在不将我的业务逻辑融入我的UI的情况下,处理此问题的最佳方法是什么?
答案 0 :(得分:1)
我还没有完成它,但我的想法是使用SignalR框架中的Hub并订阅事件并对其进行操作。只要您可以将用户指南与SignalR中的已连接用户指南相关联,您就可以将更新发送到正确的客户端,甚至可以检测它们是否仍在那里。
SignalR尚未成熟,但我所做的测试效果非常好。
我将它与Knockoutjs一起使用,我只是更新我的视图模型和调用函数。
答案 1 :(得分:1)
这些事件真的需要在UI中反映出来吗?考虑亚马逊,他们显示“你刚刚将foo添加到购物车中”,但没有显示任何其他细节。这可以通过重新定义它来避免问题。
否则,您为什么害怕“UI”中的业务逻辑 - 具体而言,为什么不在客户端中包含该系统的每个部分的服务中的某些组件,并让他们负责执行任何本地更新合适?
换句话说,在UI中运行销售税服务的部分逻辑是可以的。您(显然)不相信税收的计费计算,但您完全可以信任它为客户做正确的事情。
该模型的另一个优点是,您可以获得用户的即时反馈,或者至少可以选择显示即时反馈,无需将更多业务流程知识烘焙到客户端。
例如,重新计算运费需要时间 - 如果您的客户端显示一个微调器,需要知道某些事情会触发显示,对吗?
如果您的UI知道这一点,那么它就会围绕流程嵌入业务流程。另一方面,如果您的代码是“送货”服务的一部分,您可以通过仅更改一个服务来更改客户端中发生的响应......