【发布时间】:2014-05-23 08:16:12
【问题描述】:
假设一个方法根据一个相当大的枚举值选择一个动作。 我们的声纳现在抱怨这种方法的圈复杂度很高(自然是关于 case 语句的数量)。
我知道,大型 switch case 语句并不是 OOP 中最好的样式,但有时使用它们(在我的例子中是评估运算符标记的解析器)而不是构建复杂的对象树是非常合适的。
我现在关心的是如何处理?是否有任何设计模式可以有意义地拆分这样的开关盒?或者我可以(并且应该)从测量 CC 中排除该类(因为其中可能有其他方法可以轻松避免高 CC)?
这并不是一件真正重要的事情;我只是不喜欢我的项目有我无法删除的警告;o)
编辑:代码示例
String process()
String fieldName = this.getField() != null ? this.getField().getSchemaName() : null;
String result = "";
switch (op) {
case PHRASE:
result = "";
if(!value.isEmpty() && value.get(0) != null) {
result = value.get(0).toString();
}
break;
case EQUALS:
case GT:
case GTE:
case LT:
case LTE:
case NOT_EQUALS:
result = prepareSingleParameterStatement(fieldName);
break;
case BETWEEN_EXC:
case BETWEEN_INC:
result = prepareDoubleParameterStatement(fieldName);
break;
case IN:
case NOT_IN:
case ALL_IN:
result = prepareCollectionStatement(fieldName);
break;
case AND:
case OR:
result = prepareLogicalStatement();
break;
case NOT:
result = prepareNotStatement();
break;
default:
break;
}
return result;
}
【问题讨论】:
标签: java enums sonarqube cyclomatic-complexity