Quindi, guardando prima ho notato alcuni commenti sui metodi lunghi come cattiva pratica.
Non sono sicuro di essere sempre d'accordo sul fatto che i metodi lunghi siano cattivi (e vorrebbero le opinioni degli altri).
Ad esempio, ho alcune viste Django che eseguono un po 'di elaborazione degli oggetti prima di inviarli alla vista, un metodo lungo è 350 righe di codice. Ho scritto il mio codice in modo che si occupi dei parametri - ordinamento / filtro del queryset, quindi a poco a poco esegue alcune elaborazioni sugli oggetti restituiti dalla mia query.
Quindi l'elaborazione è principalmente aggregazione condizionale, che ha regole abbastanza complesse che non possono essere facilmente eseguite nel database, quindi ho alcune variabili dichiarate al di fuori del ciclo principale e quindi le ho alterate durante il ciclo.
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
Quindi, secondo la teoria, dovrei scomporre tutto il codice in metodi più piccoli, in modo da avere il metodo di visualizzazione come massimo una pagina.
Tuttavia, avendo lavorato su varie basi di codice in passato, a volte trovo che renda il codice meno leggibile, quando è necessario passare costantemente da un metodo all'altro per capire tutte le sue parti, mantenendo il metodo più esterno nella tua testa.
Trovo che avendo un metodo lungo ben formattato, puoi vedere la logica più facilmente, poiché non viene nascosta nei metodi interni.
Potrei scomporre il codice in metodi più piccoli, ma spesso c'è un ciclo interno utilizzato per due o tre cose, quindi si tradurrebbe in codice più complesso o metodi che non fanno una cosa ma due o tre (in alternativa Potrei ripetere i loop interni per ogni attività, ma poi ci sarà un successo nelle prestazioni).
Quindi c'è un caso in cui i metodi lunghi non sono sempre male? C'è sempre un caso per i metodi di scrittura, quando saranno usati solo in un posto?
AGGIORNAMENTO: Sembra che abbia posto questa domanda oltre un anno fa.
Quindi ho rifattorizzato il codice dopo la risposta (mista) qui, diviso in metodi. È un'app di Django che recupera insiemi complessi di oggetti correlati dal database, quindi l'argomento test è fuori (probabilmente ci sarebbe voluto quasi tutto l'anno per creare oggetti rilevanti per i casi di test. Ho un tipo di "necessità fatte ieri" ambiente di lavoro prima che qualcuno si lamenti). Correggere i bug in quella parte del codice è ora leggermente più semplice, ma non così enormemente.
prima :
#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
adesso:
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