2014-02-05 2 views
1

Как я могу уменьшить цикломатическую сложность следующего кодаСнижения цикломатической сложности

public class AnswerTypeEnumConverter implements CustomConverter { 

    public Object convert(Object destination, Object source, Class destinationClass, Class sourceClass) 
    ... 

метода convert() от интерфейса CustomConverter, который предопределенный интерфейс в моем проекте и предоставляются как банка, так что я не может изменить подпись convert() метода, который

Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass); 

Я использую SONAR 3.6 и он показывает ошибку, как:

The Cyclomatic Complexity of this method is 15 which is greater than 10 authorized. 

Вот код для convert метода

public Object convert(Object destination, Object source, Class<?> destinationClass, Class<?> sourceClass) { 
    Object destinationValue = destination; 
    if (source == null) { 
     LOGGER.info("APPLICATION OBJECT IS NULL CONVERSION STOPPED AND RETURNING NULL"); 
     return null; 
    } 
    if (destinationValue == null) { 
     destinationValue = new KYExchangeTransfer(); 
    } 
    destinationValue = setRequest(((Application) source), ((KYExchangeTransfer) destinationValue)); 
    return destinationValue; 
} 

Как я могу уменьшить сложность?

+2

Не видя код 'convert' метода, это трудно, чтобы помочь вам изменить его .... – assylias

+1

цикломатической Сложность обусловлена ​​большим количество, если -все заявления. Это, как правило, кодовый запах, который указывает на отсутствие абстракции. –

+1

Я отредактировал вопрос, включив ваш исходный код. Пожалуйста, дайте мне знать, если я переписал его неправильно. –

ответ

3

Вы должны удалить if, else if, else, switch, while и т. Д. (Каждая инструкция потока) и переместить их на другой метод или использовать соответствующий шаблон дизайна.

Например, вы должны изменить, если долго еще цепь в полиморфизм

+0

Есть 3 случая, когда в моем коде для convert() есть значения, и у каждого есть разные типы возвращаемых данных .... Возможно ли правильно написать отдельный метод для каждого из этих ... . Я попытался поместить эти все, если в отдельном методе, но результат дал то же самое по soanr ... Заранее спасибо , так что я должен делать .... – Abhishek

+0

Вы говорите о 3 операторах if, но в коде выше Я вижу только 2 заявления. Код, который вы показываете, не имеет такой большой циклической сложности. Вы делаете что-то неправильно. Возможно, вы как-то неправильно смотрите на неправильный метод, если изменения в коде не различаются в циклической сложности. Двойной проверить все, что нужно. – zimi

Смежные вопросы