我写了一个执行系统备份的c#程序。
备份过程基本上从数据库中读取数据并在文件系统中创建备份。
备份过程需要45-75秒才能完成, 我的产品经理要求我实施取消功能。
所以这就是我所做的:
如果已应用取消,我会在数据库中保留“取消请求”记录。
在整个备份过程中(包含几个步骤),我正在调用方法ThrowIfCancelRequested()并回滚过程,如果是这样的话。
现在问题是它使我的代码变得丑陋,现在我到处都有这个ThrowIfCancelRequested(),我的意思是它完成了工作,但它的丑陋。
我还想过可能会重新设计我的备份流程结构,这样我的主备份流程就会注入包含取消操作的备份步骤。
E.g。
interface IBackupStep
{
void Execute();
void OnCancel();
}
void main(IEnumerable<IBackupStep> steps)
{
foreach (var step in steps)
{
step.Execute()
}
}
这里的问题我几乎不可能做到,备份过程最初并非由我编写,而且很难重构它的神对象代码。
所以我的问题是,也许还有另一个我想念的替代方案,这也会使我的代码工作并且设计得更好?