2013-06-03 62 views
0

我有一個關於報告進度的設計問題。想象一下,我有一個充當數據容器的類,比如說一個類「TextFile」,它有一個來自文本文件的行的列表。這個類的構造函數將文件路徑作爲輸入,然後逐行讀入文件。面向對象設計:報告進度的最佳實踐?

現在,爲了監視進度,調用此數據類的構造函數的線程想要獲得有關已讀取多少行以及剩下要讀取的內容的一些反饋,以便它可以顯示狀態在GUI級別的進度條中。有幾種方法可以實現這一點(例如,只要進度已經完成,就將數據類中的事件觸發,將進度條元素的引用傳遞給數據類的構造函數),但是從OOD的角度來看,最佳或推薦的方法是什麼? ? 感謝提前一百萬。

乾杯,

馬丁

回答

1

我不認爲這是一個 「最好」 的方法。這一切都取決於你的項目的限制。

基於事件的方法使您可以獲得最佳的進度精度,因爲您可以在讀取每行後更新進度。但它可能不是非常有效,因爲你會有大量的事件發生。順便提一下,基於事件的方法的一個優點是它可以讓您在需要時註冊和取消註冊事件偵聽器,因此您可以輕鬆地擁有多個偵聽器。

您可能還有一個Progress屬性,可以被其他對象讀取。這樣,只有在需要時才能刷新進度。其他對象也可以控制何時需要刷新進度。

所以這幾乎是你要做的用法。你會有多個聽衆嗎?他們是否需要經常刷新進度?您能否每次只讀取100行或每秒更新/通知進度更改,而不是在讀取每行之後?

+0

嗨馬歇爾,非常感謝您的回覆。我將你的評論傳遞給了我的開發人員,他接着選擇創建另一個接受對進度條的引用的構造函數。就將GUI從數據類中分離出來而言,它看起來並不是很乾淨,但它起作用。 – user1156620

+0

在這種情況下,您應該定義一個接口(例如帶有「Progress」屬性的「IProgressReport」),並創建一個構造函數,將實現此接口的對象作爲參數。 這樣,您的GUI類取決於「報告其進度的東西」,這在概念上更爲正確。順便說一句,這會讓你使用窗口報告除TextFile類以外的其他對象的進度。 – Marshall777