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