在长时间运行的过程和用户​​界面/业务逻辑分离期间提供用户反馈

时间:2009-02-16 02:29:11

标签: user-interface hci

在执行长时间运行的流程时,最好向用户提供反馈,例如更新进度条。

GUI库的一些常见问题解答建议如下:

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

无论如何,我们知道将业务逻辑代码与用户界面代码分开是一种最佳实践。上面的例子是在业务逻辑函数中混合用户界面代码。

在业务逻辑层中实现功能的好方法是什么?在不混合图层的情况下,用户界面可以轻松跟踪进度?

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

3 个答案:

答案 0 :(得分:5)

提供回调界面。业务逻辑每隔一段时间就会调用它的方法。用户层将更新进度或其他任何内容。如果你想允许取消 - 没问题,让回调方法有一个返回值,表示需要取消。无论线程数多少,这都可以。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

出版是一个很好的方式。这完全取决于平台如何完成。但是,当谈到用户体验时,还需要考虑以下几点:

  • 如果您不知道任务执行了多长时间,请不要为用户提供进度条。还剩下几点?中途是什么意思?最好使用沙漏功能(旋转轮,弹跳进度条等)。

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

  • 长时间运行的进度应该始终支持带有转义的用户,这是一种取消请求的方法。您不希望长时间锁定用户。更好的是在后台完全处理长时间运行的请求,并让用户在结果返回时返回。