我正在尝试重构一英里长的方法,并在考虑是否抛出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,但是在我看来,外部方法中的代码很多。
答案 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;
}