Als ich mich also früher umsah, bemerkte ich einige Kommentare darüber, dass lange Methoden schlechte Praxis sind.
Ich bin mir nicht sicher, ob ich der Meinung bin, dass lange Methoden schlecht sind (und ich möchte Meinungen von anderen).
Zum Beispiel habe ich einige Django-Ansichten, die ein wenig die Objekte bearbeiten, bevor sie an die Ansicht gesendet werden. Eine lange Methode sind 350 Codezeilen. Ich habe meinen Code so geschrieben, dass er sich mit den Parametern befasst - das Abfrageset wird sortiert / gefiltert, und dann werden die von meiner Abfrage zurückgegebenen Objekte nach und nach verarbeitet.
Die Verarbeitung ist also hauptsächlich eine bedingte Aggregation mit ausreichend komplexen Regeln, die nicht einfach in der Datenbank ausgeführt werden können. Daher habe ich einige Variablen außerhalb der Hauptschleife deklariert, die dann während der Schleife geändert werden.
variable_1 = 0
variable_2 = 0
for object in queryset :
if object.condition_condition_a and variable_2 > 0 :
variable 1+= 1
.....
...
.
more conditions to alter the variables
return queryset, and context
Nach der Theorie sollte ich also den gesamten Code in kleinere Methoden zerlegen, damit die View-Methode maximal eine Seite lang ist.
Nachdem ich in der Vergangenheit an verschiedenen Codebasen gearbeitet habe, finde ich manchmal, dass sie den Code weniger lesbar machen, wenn Sie ständig von einer Methode zur nächsten springen müssen, um alle Teile herauszufinden, während Sie die äußerste Methode im Kopf behalten.
Ich finde, dass man mit einer langen Methode, die gut formatiert ist, die Logik leichter erkennen kann, da sie in inneren Methoden nicht verborgen bleibt.
Ich könnte den Code in kleinere Methoden zerlegen, aber oft gibt es eine innere Schleife, die für zwei oder drei Dinge verwendet wird, was zu komplexerem Code oder Methoden führt, die nicht nur eine Sache, sondern zwei oder drei machen (alternativ dazu) Ich könnte innere Schleifen für jede Aufgabe wiederholen, aber dann wird es einen Leistungstreffer geben.
Gibt es einen Fall, in dem lange Methoden nicht immer schlecht sind? Gibt es immer einen Fall für Schreibmethoden, wenn sie nur an einem Ort verwendet werden?
UPDATE: Sieht so aus, als hätte ich diese Frage vor über einem Jahr gestellt.
Deshalb habe ich den Code nach der (gemischten) Antwort hier überarbeitet und in Methoden aufgeteilt. Da es sich um eine Django-App handelt, die komplexe Mengen zusammengehöriger Objekte aus der Datenbank abruft, ist das Testargument nicht vorhanden (es hätte wahrscheinlich den größten Teil des Jahres gedauert, um relevante Objekte für die Testfälle zu erstellen. Ich habe den Typ "Das muss gestern erledigt sein" Arbeitsumgebung, bevor sich jemand beschwert). Das Beheben von Fehlern in diesem Teil des Codes ist jetzt etwas einfacher, aber nicht so massiv.
Vor :
#comment 1
bit of (uncomplicated) code 1a
bit of code 2a
#comment 2
bit of code 2a
bit of code 2b
bit of code 2c
#comment 3
bit of code 3
jetzt:
method_call_1
method_call_2
method_call_3
def method_1
bit of (uncomplicated) code 1a
bit of code 2a
def method_2
bit of code 2a
bit of code 2b
bit of code 2c
def method_3
bit of code 3