3
我有一个Gui应用程序将执行不同的验证。由于部分验证的可能需要更长的时间,我在一个BackgroundWorker运行它们,当前的代码如下所示:有多个DoWorkEventHandlers是不好的做法吗?
//sample validator interface
public interface Validator
{
void Validate();
}
//BGWs DoWork-method:
private void myBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
ValidatorA.Validate();
ValidatorB.Validate();
ValidatorC.Validate();
}
现在也有一些验证器必须支持取消为好。这可以通过添加一堆的代码来实现或者我可以这样来做:
public interface Validator
{
void DoValidationWork(object sender, DoWorkEventArgs e);
}
class NormalValidator
{
void DoValidationWork(object sender, DoWorkEventArgs e)
{
//validation-work
}
}
class CancelableValidator
{
void DoValidationWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bgw = sender as BackgroundWorker;
while(!bgw.CancellationPending)
{
//validation-work
}
}
}
//setup
myBGW.DoWork += ValidatorA.DoValidationWork;
myBGW.DoWork += CancelableValidatorB.DoValidationWork;
myBGW.DoWork += ValidatorC.DoValidationWork;
这将根据我的理解产生相同的结果,但每一个验证器可以自行处理取消。
可以有多个DoWork-Handlers吗?或者这是不好的做法吗?
我不知道,但我真的不相信它会使代码更简单。在等待更好的答案时,您可以对您的项目运行代码分析(使用一些非常严格的规则,例如“Microsoft Extended Design Guideline Rules”),并查看微软员工对此的看法。 – 2013-04-05 10:34:56