暗示;取消“;功能模式C#
我写了一个c#程序来执行系统备份 备份过程基本上从数据库读取数据,并在文件系统中创建备份 备份过程大约需要45-75秒才能完成, 我的产品经理要求我实现取消功能 以下是我所做的:暗示;取消“;功能模式C#,c#,.net,design-patterns,backup,C#,.net,Design Patterns,Backup,我写了一个c#程序来执行系统备份 备份过程基本上从数据库读取数据,并在文件系统中创建备份 备份过程大约需要45-75秒才能完成, 我的产品经理要求我实现取消功能 以下是我所做的: 如果应用了cancel,我会在数据库中保留一条“cancel requested”记录 在整个备份过程(包括几个步骤)中,我调用一个方法ThrowIfCancelRequested(),如果是,则回滚该过程 现在的问题是它让我的代码很难看,现在我到处都是ThrowIfCancelRequested(),我的意思是它完成
接口IBackupStep
{
void Execute();
void OnCancel();
}
空干管(IEnumerable steps)
{
foreach(var步进)
{
执行()步骤
}
}
这里的问题是,这对我来说几乎是不可能的,备份过程最初不是由我编写的,重构它的god objects代码非常困难
所以我的问题是,也许我缺少的另一个替代方案也能使我的代码更好地工作并设计?foreach循环不是必需的,因为参数中只有一个步骤。我只是想一想。哦,得了吧,你知道这是一个打字错误,我会纠正它:)你可以听一个事件,以避免浏览数据库,但这不会消除不时检查的重复。。一种可能是在不同的线程中启动备份,然后取消该线程,但问题中没有足够的信息来确定这是否是一件好事:)foreach循环不是必需的,因为参数中只有一个步骤。我只是想一想。哦,得了吧,你知道这是一个打字错误,我会纠正它:)你可以听一个事件,以避免浏览数据库,但这不会消除不时检查的重复。。一种可能是在另一个线程中启动备份,然后取消该线程,但问题中没有足够的信息来确定这是否是一件好事:)
interface IBackupStep
{
void Execute();
void OnCancel();
}
void main(IEnumerable<IBackupStep> steps)
{
foreach (var step in steps)
{
step.Execute()
}
}