2012-09-13 51 views
-1

這個代碼(mangled)被PMD標記爲太深嵌套。我個人總是用我編寫的任何語言編寫代碼 - 尤其是大型數據庫驅動的for-loops。深嵌套如果...然後

這種編碼風格真的令人f目結舌嗎?我發現它是最可維護和最乾淨的。

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); 
         } 
        } 
       } 
      } 
     } 
    } 
+9

可能更適合http://codereview.stackexchange.com/。 –

+0

有無數書籍和文章在線描述爲什麼這不是一個很好的寫代碼的方式。我很好奇......你爲什麼認爲它是「最可維護和最乾淨的」? –

回答

4

靜態分析工具根據普遍接受(或可配置)的標準給出主觀建議。

所以沒有人能夠給你正確的答案,如果你的循環太深嵌套。

如果您不喜歡PMD給您的建議,我建議以不同的方式配置PMD,以便它不運行該規則或使用不同的參數運行該規則。

即便如此,將一些邏輯提取到更小的方法中也是微不足道的。

2

當你有嵌套循環和許多ifs,否則該方法的Cyclomatic Complexity增加。它基本上表明瞭測試的難度。

將您的方法拆分爲更小的方法,或者如果您對代碼看起來沒有問題,可以忽略它。

+0

我認爲這是值得澄清的......重構出方法不會減少整個代碼的CC,它只會降低每個方法的複雜度。而且你非常正確,這使得測試你的代碼更容易! –