Donc, en regardant autour de moi plus tôt, j'ai remarqué des commentaires sur les méthodes longues comme étant une mauvaise pratique.
Je ne suis pas sûr de toujours être d'accord sur le fait que les méthodes longues sont mauvaises (et aimeraient avoir l'avis des autres).
Par exemple, certaines vues Django traitent un peu les objets avant de les envoyer à la vue, une méthode longue consistant en 350 lignes de code. Mon code est écrit de manière à traiter les paramètres - trier / filtrer le jeu de requêtes, puis effectue petit à petit le traitement des objets renvoyés par ma requête.
Donc, le traitement est principalement une agrégation conditionnelle, qui a des règles assez complexes pour que cela ne puisse pas être fait facilement dans la base de données, donc j'ai des variables déclarées en dehors de la boucle principale qui sont ensuite modifiées pendant la boucle.
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
Donc, selon la théorie, je devrais décomposer tout le code en méthodes plus petites, afin que la méthode d'affichage ait une longueur maximale d'une page.
Cependant, ayant déjà travaillé sur différentes bases de code dans le passé, je trouve parfois que cela rend le code moins lisible, alors que vous devez constamment passer d'une méthode à l'autre pour en comprendre toutes les parties, tout en gardant la méthode la plus externe dans votre tête.
Je trouve qu’une méthode longue, bien formatée, permet de voir la logique plus facilement, car elle ne se cache pas dans les méthodes internes.
Je pourrais factoriser le code en méthodes plus petites, mais il existe souvent une boucle interne utilisée pour deux ou trois choses, de sorte que le code soit plus complexe ou que les méthodes ne font qu'une chose, mais deux ou trois (alternativement Je pourrais répéter les boucles internes pour chaque tâche, mais alors il y aura un coup de performance).
Alors, y a-t-il un cas où les méthodes longues ne sont pas toujours mauvaises? Existe-t-il toujours un cas pour les méthodes d'écriture, lorsqu'elles ne seront utilisées qu'à un seul endroit?
MISE À JOUR: On dirait que j'ai posé cette question il y a plus d'un an.
J'ai donc refactoré le code après la réponse (mélangée) ici, en le divisant en méthodes. Il s'agit d'une application Django récupérant des ensembles complexes d'objets liés dans la base de données. L'argument de test est donc sorti (il aurait probablement fallu presque toute l'année pour créer des objets pertinents pour les scénarios de test. J'ai un type "cela doit être fait hier" environnement de travail avant que quiconque ne se plaint). La correction des bogues dans cette partie du code est maintenant un peu plus facile, mais pas de manière massive.
avant :
#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
maintenant:
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