MVC如何中止方法执行?

时间:2013-12-16 12:19:02

标签: c# asp.net-mvc

我有一个方法,如果发生某些条件,我想中止它的执行。

最简单的情况是

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操作(如果重要)

4 个答案:

答案 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)

不是设置标志,只需在检测到中止条件时从方法返回。如果仍然留下一个笨拙的方法,问题可能是它的代码太多了!确定工作单​​元并将它们重构为单独的子方法。