2009-02-16 61 views
1

当执行长时间运行的过程时,向用户提供反馈(例如,更新进度栏)是一种很好的做法。在长时间运行的过程和用户​​界面/业务逻辑分离期间给用户反馈

一些常见问题解答GUI库建议是这样的:

function long_running_progress() 
    do_some_work() 
    update_progress_bar() 
    while finish 
     do_some_work() 
     update_progress_bar() 
    end while 
end function 

无论如何,我们知道它是从用户界面代码分离业务逻辑代码的最佳做法。上面的示例将业务逻辑功能中的用户界面代码混合在一起。

什么是在业务逻辑层实现功能的好技术,其进度可以很容易地由用户界面跟踪而不需要混合图层?

欢迎任何语言或平台的答案。

回答

5

提供回调接口。业务逻辑会每隔一段时间调用一次它的方法。用户层会更新进度或其他。如果你想允许取消 - 没有问题,让回调方法有一个返回值,这将表明需要取消。无论线程的数量如何,这都可以工作。

1

如果您使用了MVC范例,您可以让Model将其当前进度状态作为属性发布,Controller可以每隔x秒提取一次,然后将其放入视图中。这虽然假设多线程,但我不确定是否允许。

1

发布是一个好方法。这完全取决于平台是如何完成的。然而,当涉及到用户体验有几件事情需要考虑的:

  • 不要给用户一个进度条,如果你不知道这个任务是如何执行长。什么时候离开?中途意味着什么?最好使用沙漏功能(旋转轮,弹跳进度条等)。

  • 查看进度的唯一有趣的事情是时间;过程中的中途是什么意思?你想知道你是否有时间喝杯咖啡。如果你显示其他的东西,你可能会显示系统编程的工作。大多数用户不感兴趣或只是感到困惑。

  • 长时间运行的进度应该始终支持用户使用转义来取消请求。您不想长时间锁定用户。更好的办法是在后台完全处理长时间运行的请求,并在返回结果时让用户返回。

相关问题