抛出异常来处理退货

时间:2019-01-10 06:18:14

标签: c# design-patterns return refactoring

我正在尝试重构一英里长的方法,并在考虑是否抛出ReturnException而不是调用return。看看我的例子:

当前英里长的代码如下:

var type = "Online System";
if(  type == GetEnumDescription(Type.OnlineSystem))
{
}

我想通过以下方式对其进行重构:

  public void MyMileLongMethod()
  {
        //some logic
        //some more logic

        if (a == 10 && (b == "cool" || b == "super cool"))
        {
            //logic here 
            //more logic
            //15 more lines of code. 
            return;
        }

        if (x && y || z==5)
        {
            //logic here 
            //more logic
            //20 more lines of code. 
            return;
        }
        //more conditions like this that calls a return
        // probable more logic here
    }

问题:抛出异常并在调用方法中捕获它,然后在catch中调用return的好习惯吗?如果有,那么是否有一个常用的模式名称? 如果这不是一个好习惯,那么还有其他方法吗?还是我的解决方案是答案?

我拥有的另一种解决方案是,检查外部方法中的条件,然后调用执行逻辑的方法,然后调用return,但是在我看来,外部方法中的代码很多。

1 个答案:

答案 0 :(得分:3)

我赞成使用这种变体:

private void MyRefactoredMethod(...) {
    ...
    if (...)
        return; // was "continue;"
    ...
    if (!ConditionOneMethod(...))
        return;
    ...
}

private boolean ConditionOneMethod(...) {
    ...
    if (...)
        return false; // was a continue from a nested operation
    ...
    return true;
}