Après la lecture de "Quel est votre/une bonne limite pour la complexité cyclomatique?", Je me rends compte que beaucoup de mes collègues ont été très ennuyé avec cette nouvelle QA de la politique sur notre projet: les 10 plus de complexité cyclomatique par fonction.
Sens: pas plus de 10 'si', 'else', 'essayer', "attraper" et d'autres workflow code de la ramification de la déclaration. La droite. Comme je l'ai expliqué dans"avez-vous d'essai méthode privée?', une telle politique présente de nombreux effets secondaires.
Mais: Au début de notre (200 personnes - 7 ans) projet, nous avons été heureux d'enregistrement (et non, on ne peut pas facilement déléguer à une sorte de"programmation orientée Aspectsapproche pour les journaux).
myLogger.info("A String");
myLogger.fine("A more complicated String");
...
Et quand les premières versions de notre Système, nous avons connu d'énorme problème de mémoire non pas à cause de l'exploitation forestière qui était à un point éteint), mais parce que le journal des paramètres (les cordes), qui sont toujours calculés, puis transmise à la 'info()' ou 'amende()' fonctions, seulement pour découvrir que le niveau de journalisation est "OFF", et qu'aucun enregistrement n'étaient en train de prendre place!
Donc QA est revenu et a exhorté nos programmeurs de faire conditionnelle de l'exploitation forestière. Toujours.
if(myLogger.isLoggable(Level.INFO) { myLogger.info("A String");
if(myLogger.isLoggable(Level.FINE) { myLogger.fine("A more complicated String");
...
Mais maintenant, avec qui "peut-pas-être-déplacer' 10 complexité cyclomatique niveau par la fonction de limite, ils soutiennent que les différents journaux qu'ils mettent dans leur fonction est ressenti comme un fardeau, parce que chaque "si(isLoggable())" est compté comme +1 complexité cyclomatique!
Donc, si une fonction a 8 'si', 'autre' et ainsi de suite, dans un étroitement couplés pas-facilement partageable algorithme, et 3 critique du journal des actions... ils ont manqué à la limite, même si le conditionnel journaux peut-être pas vraiment de la partie de ladite complexité de cette fonction...
Comment réagiriez-vous face à cette situation ?
J'ai vu un couple d'intéressant codage de l'évolution (en raison de ce "conflit") dans mon projet, mais je veux juste obtenir vos pensées.
Merci pour toutes les réponses.
Je dois insister pour que le problème n'est pas "mise en forme" liées, mais l'argument de l'évaluation " (évaluation qui peut être très coûteux à faire, juste avant d'appeler une méthode qui permettra de ne rien faire)
Ainsi, lorsqu'un écrit ci-dessus "Une Chaîne", j'ai fait aFunction(), avec aFunction() retourne une Chaîne, et un appel à une méthode compliquée de la collecte et de l'informatique à tous les types de données de journal affiché par le logger... ou pas (d'où la question, et l' obligation d'utiliser la journalisation conditionnelle, d'où le problème réel de l'augmentation artificielle de la "complexité cyclomatique'...)
Maintenant, je reçois le"variadic fonction " point avancé par certains d'entre vous (merci John).
Remarque: un test rapide dans java6 montre que mon varargs fonction évalue ses arguments avant d'être appelé, de sorte qu'il ne peut pas être appliquée pour l'appel de fonction, mais pour "Journal retriever objet' (ou 'la fonction wrapper'), sur lequel le toString() sera appelée uniquement si nécessaire. L'a obtenu.
Maintenant j'ai posté mon expérience sur ce sujet.
Je vais l'y laisser jusqu'à mardi prochain pour le vote, puis je sélectionne l'un de vos réponses.
Encore une fois, merci pour toutes les suggestions :)