Wie viele Codezeilen kann eine Methode mit einem guten Design haben, bevor man das Design verbessern muss?
Antworten
Zu viele Anzeigen?Codezeilen sind eine Metrik, aber auch die Codepfade sollten betrachtet werden. Jedes "if", "and", "or", jede Schleife usw. macht die Funktion komplexer. Man kann sehr kurze, komplexe Funktionen haben, und man kann auch einfach zu verstehende, aber lange Funktionen haben. Refactoring funktioniert gut, wenn man damit die Komplexität reduziert, nicht unbedingt die Anzahl der Codezeilen.
Zum Beispiel:
if (color.r == color.g && color.r == color.b)
if (color.r > 128)
newColor = color.White;
else
newColor = color.Black;
gegen
if(isGray(color))
newColor = thresholdGray(color)
Die Absicht ist klarer, und die Anzahl der Wege ist geringer.
Es stimmt, dass die LOC eine miserable Kennzahl ist, da sie nicht mit der Eigenschaft korreliert, die Sie wirklich interessiert (Qualität des Designs). Aber ihre große Stärke als Metrik - und der Grund, warum sie so häufig verwendet und diskutiert wird - ist natürlich, dass sie so einfach zu messen ist. Das ist keine reine Faulheit; für einen Bruchteil von einem Prozent des Aufwands erhält man - nun ja, vielleicht 20 oder 30 Prozent des Werts aussagekräftigerer Metriken. Sie können einfach einen Blick auf eine Methode oder die letzte Zeile einer Klasse werfen und die LOC-Metrik bewerten. Man kann sich einfach die Höhe des Rollbalkens ansehen und hat eine ziemlich gute Vorstellung davon.
Und es gibt echte LOC-Grenzen, die sinnvoll sind - zu viele, die auf einen Bildschirm oder eine Textseite passen, sind wirklich zu viele, ungeachtet der Einfachheit und Kohärenz.
Ich mag wirklich kurze Methoden. Einzeiler sind großartig. Wenn eine Methode in den zweistelligen Bereich der LOC geht, juckt es. Wenn es 30 oder mehr sind, ist es schmerzhaft. Verwenden Sie LOC, aber seien Sie sich über seine Schwäche als Metrik im Klaren und wissen Sie, welche besseren Metriken (z.B. zyklomatische Komplexität) es gibt. Verwenden Sie diese, wenn Sie etwas Besseres brauchen.
Wahrscheinlich sollten wir hier eher die von einer Methode implementierte "Verantwortung" betrachten, als uns an harten Zahlen zu orientieren. Wenn wir versuchen, eine Methode auf eine einzige Zuständigkeit zu beschränken, wird sich automatisch um LOC gekümmert.
Eine weitere Faustregel, die wir befolgen können, ist die Begrenzung der Länge einer Methode, die wir auf einem einzigen Bildschirm sehen können.
- See previous answers
- Weitere Antworten anzeigen