-1

此代码(损坏的)被 PMD 标记为嵌套太深。我个人总是用我编写过的任何语言以这种方式编写代码——尤其是大型数据库驱动的 for 循环。

这种编码风格真的不受欢迎吗?我发现它是最可维护和最干净的。

    for (MyList MyRegistry : listJSP) {
        if (meta.containsKey(MyRegistry.getFieldName()) && MyRegistry.getOrderType().equals(orderType)) {

            String CustomerInput = meta.get(MyRegistry.getFieldName())[0];
            String jspFieldName = MyRegistry.getFieldName();

            if (MyRegistry.getErrorsCheck()) {
                mapErrors = valUtil.adTextContainsErrors(CustomerInput, cms.getRegex("VALIDATION"));
                if (mapErrors.containsKey(Boolean.TRUE)) {
                    mapValidationErrors.put(jspFieldName, mapErrors.get(Boolean.parseBoolean("true")));
                    log.info("Errors " + "{}: ", CustomerInput);
                }
            }

            List<JSPFieldValidation> jSPFieldValidation = cms.getJSPFieldValidations(orderType, MyRegistry.getFieldName());
            for (JSPFieldValidation jspf : jSPFieldValidation) {

                String valRule = jspf.getValidationRule();

                if (valRule.equals("REQUIRED")) {
                    if (isEmpty(CustomerInput)) {
                        mapValidationErrors.put(orderType, orderType);
                        log.info(CustomerInput + "{}: ", valRule);
                    }
                }
                else {
                    Pattern p = cms.getRegex(valRule);
                    if (p != null) {
                        if (!isValid(CustomerInput, p)) {
                            mapValidationErrors.put(orderType, orderType);
                            log.info(CustomerInput + "{}", valRule);
                        }
                    }
                }
            }
        }
    }
4

2 回答 2

4

静态分析工具根据普遍接受的(或可配置的)标准给出主观建议。

所以没有人能够给你正确的答案,如果你的循环嵌套太深。

如果您不喜欢 PMD 给您的建议,我建议您以不同方式配置 PMD,这样它就不会运行该规则或使用不同的参数运行它。

话虽如此,将一些逻辑提取到更小的方法中将是微不足道的。

于 2012-09-13T19:16:11.460 回答
2

当您有嵌套循环和许多 if 和 else 时,该方法的循环复杂度会增加。它基本上表明了测试的难度。

将您的方法拆分为更小的方法,或者如果您对代码没有问题,您可以忽略它。

于 2012-09-13T19:19:21.947 回答