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