C#ProgressBar设计模式
问题描述:
我正在研究数据库升级应用程序。升级程序更新数据库的模式(通过执行SQL语句添加新列,重命名列,添加新表,新视图到现有数据库)。当用户想要从版本1.0升级到2.0时,将从对象工厂获取“升级”对象,并调用每个“升级器”的“执行”方法。应用程序的GUI有一个进度条,每次升级对象执行SQL语句时,进度条都会增加。C#ProgressBar设计模式
while (!version.Equal(CurrentVersion))
{
IUpgrader myUpgrader = UpgraderFactory.GetUpgrader(version);
myUpgrader.Execute(UpgradedFile,progressbar);
version.Increment();
}
我的问题很简单:升级对象应该如何与进度条进行通信。在上面的代码中,升级对象被给予直接访问进度条,但我想知道是否存在一些更好的方式来做这个或更好的设计模式。
问候, 勒布
答
我可能会放在一起进度条操作的接口(C#示例):
interface IProgressBar
{
int MinValue { get; set; }
int MaxValue { get; set; }
int Value { get; set; }
}
然后,我将有升级程序对象采取的接口类型的参数。最后,我将创建一个实现接口的类,并且它还包含对进度条组件的引用,该组件用于可视化进度。
通过这种方式,您将不会在升级程序和进度可视化之间产生紧密耦合。
答
为了实现我将向升级器提供的IUpgrader添加一个ProgessEvent。 gui可以添加eventlistener到该事件并相应地更新progessbar。
许多应用程序都是不折不扣的。他们使用一个定时器来推进他们的进度条,以防止忙碌的应用程序仍然活着的错觉。