La réduction de la Complexité Cyclomatique
Comment puis-je réduire la complexité cyclomatique de le code suivant
public class AnswerTypeEnumConverter implements CustomConverter {
public Object convert(Object destination, Object source, Class destinationClass, Class sourceClass)
...
la méthode convert()
est à partir de l'interface CustomConverter
qui est une interface prédéfinie dans mon projet et est fourni comme un pot, donc je ne peux pas changer la signature de la convert()
méthode, qui est
Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass);
Je suis à l'aide de SONAR 3.6 et il montre l'erreur comme:
The Cyclomatic Complexity of this method is 15 which is greater than 10 authorized.
Voici le code pour le convert
méthode
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;
}
Comment puis-je réduire la complexité?
- Sans voir le code de la
convert
méthode, il est difficile de vous aider à le changer.... - La Complexité cyclomatique est causé par beaucoup de if-else. C'est généralement un code-odeur qui indique l'absence de l'abstraction.
- J'ai édité la question d'inclure votre code source. S'il vous plaît laissez-moi savoir si j'ai transcrit de façon incorrecte.
- double possible de Comment puis-je réduire la Complexité Cyclomatique de cela?
- Voici mon code pour convertir() la méthode
Vous devez vous connecter pour publier un commentaire.
Vous devez supprimer les if, else if, else, switch, while, etc. (tous les flux de l'instruction) et de les déplacer vers une autre méthode ou l'utilisation appropriée motif de conception.
Par exemple, vous devriez changer de long si le reste de la chaîne dans polymorphisme