2009-02-16 60 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

發佈是一個好方法。這完全取決於平臺是如何完成的。然而,當涉及到用戶體驗有幾件事情需要考慮的:

  • 不要給用戶一個進度條,如果你不知道這個任務是如何執行長。什麼時候離開?中途意味着什麼?最好使用沙漏功能(旋轉輪,彈跳進度條等)。

  • 查看進度的唯一有趣的事情是時間;過程中的中途是什麼意思?你想知道你是否有時間喝杯咖啡。如果你顯示其他的東西,你可能會顯示系統編程的工作。大多數用戶不感興趣或只是感到困惑。

  • 長時間運行的進度應該始終支持用戶使用轉義來取消請求。您不想長時間鎖定用戶。更好的辦法是在後臺完全處理長時間運行的請求,並在返回結果時讓用戶返回。

相關問題