Quindi, guardandomi in giro, 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 lungo metodo costituito da 350 linee di codice. Ho scritto il mio codice in modo che si occupi dei parametri - ordinando / filtrando il queryset, poi a mano a mano fa qualche elaborazione sugli oggetti che la mia query ha restituito.
Quindi l'elaborazione è principalmente un'aggregazione condizionale, che ha regole abbastanza complesse che non può essere facilmente eseguita nel database, quindi ho alcune variabili dichiarate al di fuori del ciclo principale e quindi vengono 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 calcolare tutto il codice in metodi più piccoli, così che ho il metodo di visualizzazione come massimo di una pagina.
Tuttavia, avendo lavorato su varie basi di codice in passato, a volte trovo che rende il codice meno leggibile, quando è necessario passare costantemente da un metodo all'altro scoprendo tutte le parti di esso, mantenendo il metodo più esterno in la tua testa.
Trovo che avendo un lungo metodo ben formattato, puoi vedere la logica più facilmente, poiché non viene nascosto nei metodi interni.
Potrei calcolare il codice in metodi più piccoli, ma spesso c'è un ciclo interno usato per due o tre cose, quindi risulterebbe in un codice più complesso, o metodi che non fanno una cosa tranne due o tre (in alternativa potrei ripetere i loop interni per ogni compito, ma poi ci sarà un colpo di performance).
Quindi c'è un caso che i metodi lunghi non siano sempre cattivi? C'è sempre un motivo per scrivere metodi, quando saranno usati solo in un posto?
UPDATE: Sembra che abbia fatto questa domanda più di un anno fa.
Quindi ho rifattorizzato il codice dopo la risposta (mista) qui, divisa in metodi. È un'app di Django che recupera set complessi di oggetti correlati dal database, quindi l'argomento di test è fuori (probabilmente sarebbe stata necessaria la maggior parte dell'anno per creare oggetti rilevanti per i casi di test. ambiente di lavoro prima che qualcuno si lamenta). Correggere bug in quella parte del codice è leggermente più semplice ora, ma non in modo massiccio.
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
ora:
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