2010-06-03 68 views
1

我正在研究數據庫升級應用程序。升級程序更新數據庫的模式(通過執行SQL語句添加新列,重命名列,添加新表,新視圖到現有數據庫)。當用戶想要從版本1.0升級到2.0時,將從對象工廠獲取「升級」對象,並調用每個「升級器」的「執行」方法。應用程序的GUI有一個進度條,每次升級對象執行SQL語句時,進度條都會增加。C#ProgressBar設計模式

  while (!version.Equal(CurrentVersion)) 
      { 

       IUpgrader myUpgrader = UpgraderFactory.GetUpgrader(version); 

       myUpgrader.Execute(UpgradedFile,progressbar); 

       version.Increment(); 
      } 

我的問題很簡單:升級對象應該如何與進度條進行通信。在上面的代碼中,升級對象被給予直接訪問進度條,但我想知道是否存在一些更好的方式來做這個或更好的設計模式。

問候, 勒布

回答

3

我可能會放在一起進度條操作的接口(C#示例):

interface IProgressBar 
{ 
    int MinValue { get; set; } 
    int MaxValue { get; set; } 
    int Value { get; set; } 
} 

然後,我將有升級程序對象採取的接口類型的參數。最後,我將創建一個實現接口的類,並且它還包含對進度條組件的引用,該組件用於可視化進度。

通過這種方式,您將不會在升級程序和進度可視化之間產生緊密耦合。

1

爲了實現我將向升級器提供的IUpgrader添加一個ProgessEvent。 gui可以添加eventlistener到該事件並相應地更新progessbar。

許多應用程序都是不折不扣的。他們使用一個定時器來推進他們的進度條,以防止忙碌的應用程序仍然活着的錯覺。