【发布时间】:2012-07-26 14:57:10
【问题描述】:
我的系统使用带有单独处理程序的命令模式。我的命令在当前处理所有进程中的命令的 CommandService 上执行。
我有某些命令至少会执行以下其中一项操作缓慢的操作:
- 发送电子邮件
- 生成 PDF
- 发送传真
- 与第 3 方网络服务交互
我希望所有这些命令都在进程外处理,以便 UI 更加简洁。
我应该只为这些命令使用消息总线,还是应该让进程内命令处理程序调用BeginInvoke()?
编辑 - 附加信息
系统的用户数量很少(在繁忙的一天可能有 100 个并发用户),因此队列可能永远不会变得很长。这里的主要内容是减少发送带有附件 PDF(相关命令)的电子邮件时 UI 被阻止的时间。员工必须在一天内多次执行该命令。
考虑到整个情况,我想我现在会选择BeginInvoke(),原因有几个:
- 必须触摸所有 UI 交互,以确保它们的行为就像命令成功一样。 “您需要发送此文档”的提醒位于 UI 中的多个位置,并且在发送报告后会刷新整页。
- 我的客户正处于繁忙季节的中间(他们在夏季完成了超过 50% 的年度业务),因此在这个时候引入一个全新的基础设施对我来说似乎并不明智不熟悉管理。
但是知道我现在所知道的,在一个新系统上,我会从一开始就使用服务总线来处理任何慢速命令(实际上每个系统都需要发送电子邮件)并设计 UI 以便更容易地执行命令从同步处理切换到异步处理。在实现中,这基本上意味着每个 POST 都是 AJAX 并在 UI 中执行一个动作,就好像它成功了一样。 (例如,查看 Facebook 如何处理 cmets。)
【问题讨论】:
-
时间耦合和相关问题,是你应该研究的。
标签: c#-4.0 domain-driven-design cqrs message-bus