2010-06-03 83 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。

许多应用程序都是不折不扣的。他们使用一个定时器来推进他们的进度条,以防止忙碌的应用程序仍然活着的错觉。