我有一个方法,如果发生某些条件,我想中止它的执行。
最简单的情况是
public bool myFlag = true;
public bool MyMethod(/*args*/)
{
if(myFlag)
{
//do some stuff #1
}
else
return false;
if(myFlag)
{
//do some stuff #2
}
else
return false;
//etc
}
但问题是,我的mythod里面有很多代码,而且我不想在每一行中检查myFlag
,因为代码会搞砸并且难以理解。我想知道如何简化这种情况,但我没有任何想法。
我正在考虑将该方法放到单独的Thread
中,但UI必须等到操作完成,并且该metod内部还有I / O操作(如果重要)
答案 0 :(得分:1)
您似乎需要使用observer pattern
答案 1 :(得分:1)
这就是我处理这种要求的方法:基本上,我将方法分开并创建了许多子方法,然后使用异常来规范流程(我发现这是功能和可读性之间的最佳折衷)。
看起来像这样:
private void performFirstStep(/*args*/)
{
//do stuff, throw if something goes wrong
}
private void performSecondStep(/*args*/)
{
//do stuff, throw if something goes wrong
}
public bool MyMethod(/*args*/)
{
try
{
// each method is supposed to represent a single Unit Of Work
performFirstStep(/*args*/);
performSecondStep(/*args*/);
performThirdStep(/*args*/);
return true;
}
catch(Exception ex) // I usually craft a custom exc. type to use here
{
// overly simplified catch block: you'll probably want
// to *not* swallow the exceptions coming from the inside methods...
// lots of possibilities here to easen debug
return false;
}
}
您也可以制作方法bool
并使用它们的返回值,但无论如何都需要尝试捕获,以便您可以利用它。
答案 2 :(得分:0)
除非我误解,这与你的例子不完全相同,但只有一个条件检查:
public bool MyMethod(/*args*/)
{
if(!myFlag)
return false;
//Rest of glorious code!
}
答案 3 :(得分:0)
不是设置标志,只需在检测到中止条件时从方法返回。如果仍然留下一个笨拙的方法,问题可能是它的代码太多了!确定工作单元并将它们重构为单独的子方法。