2016-06-20 5 views
0

を削除する私は、コードの下からサイクロマティック複雑さ(The Cyclomatic Complexity of this method "mapRow" is 13 which is greater than 10 authorized)を取得しています:どのようにサイクロマティックcomplexcity

public RedemptionReport mapRow(ResultSet rs, int row) throws SQLException {   
     RedemptionReport redemptionReport = new RedemptionReport(); 
     redemptionReport.setRedeemDate(rs.getString(1)); 
     redemptionReport.setCashierID(rs.getString(2) != null? rs.getString(2) : ""); 
     redemptionReport.setTillNo(rs.getString(3) != null? rs.getString(3) : ""); 
     redemptionReport.setReferenceNumber(rs.getString(4) != null? rs.getString(4) : ""); 
     redemptionReport.setTransactionNumber(rs.getString(5) != null? rs.getString(5) : ""); 
     redemptionReport.setRedemptionAmount(rs.getString(6) != null? rs.getString(6) : "0"); 
     redemptionReport.setNetBillValues(rs.getString(7) != null? rs.getString(7) : "0"); 
     redemptionReport.setStoreCode(rs.getString(8) != null? rs.getString(8) : ""); 
     redemptionReport.setCardNumber(rs.getString(9) != null? rs.getString(9) : ""); 
     redemptionReport.setCardType(rs.getString(10) != null? rs.getString(10) : ""); 
     redemptionReport.setStoreDesc(rs.getString(11) != null? rs.getString(11) : ""); 
     redemptionReport.setZoneDesc(rs.getString(12) != null? rs.getString(12) : ""); 
     redemptionReport.setMobileNo(rs.getString(13) != null? rs.getString(13) : ""); 
     redemptionReport.setSchemeName(rs.getString(14)); 
     return redemptionReport; 
    } 

上記のコードから、この複雑さを取り除くためにどのように?

+0

'getStringValue(rs.getString(13))のようなメソッドを作成し;' –

+0

または単に、値を設定し、それ以降のヒットいずれかですべてのNULL値を変更 –

答えて

2

例えば、三項演算子をカプセル化するメソッドを作成します。:

private String get(String val, String def) { 
    return val != null ? val : def 
} 

それとももっと簡単:

private String get(String val) { 
    return val != null ? val : "" 
} 
1

オーバーライドRedemptionReportのセッターを。デフォルト値はRedemptionReportクラスでのみ意味があるため、これはドメインクラスに属している必要があります。 "rs.getString(x)"値をセッターメソッドに渡します。

1
public RedemptionReport mapRow(ResultSet rs) throws SQLException {   
     RedemptionReport redemptionReport = new RedemptionReport(); 
     redemptionReport.setRedeemDate(this.getResultFromResultSet(rs.getString(1))); 
     redemptionReport.setCashierID(this.getResultFromResultSet(rs.getString(2))); 
     redemptionReport.setTillNo(this.getResultFromResultSet(rs.getString(3))); 
     redemptionReport.setReferenceNumber(this.getResultFromResultSet(rs.getString(4))); 
     redemptionReport.setTransactionNumber(this.getResultFromResultSet(rs.getString(5))); 
     redemptionReport.setRedemptionAmount(this.getResultFromResultSet(rs.getString(6))); 
     redemptionReport.setNetBillValues(this.getResultFromResultSet(rs.getString(7))); 
     redemptionReport.setStoreCode(this.getResultFromResultSet(rs.getString(8))); 
     redemptionReport.setCardNumber(this.getResultFromResultSet(rs.getString(9))); 
     redemptionReport.setCardType(this.getResultFromResultSet(rs.getString(10))); 
     redemptionReport.setStoreDesc(this.getResultFromResultSet(rs.getString(11))); 
     redemptionReport.setZoneDesc(this.getResultFromResultSet(rs.getString(12))); 
     redemptionReport.setMobileNo(this.getResultFromResultSet(rs.getString(13))); 
     redemptionReport.setSchemeName(this.getResultFromResultSet(rs.getString(14))); 

return redemptionReport; 
    } 

このような作業を行うための別のプライベートメッセージを定義します(Nullをチェックしてデフォルト値を返します)。

private String getResultFromResultSet(String val){ 
     return val != null ? val : ""; 
}