Então, olhando ao redor mais cedo, notei alguns comentários sobre métodos longos serem uma prática ruim.
Não tenho certeza se sempre concordo que métodos longos são ruins (e gostariam da opinião de outras pessoas).
Por exemplo, eu tenho algumas visualizações do Django que processam um pouco os objetos antes de enviá-las para a visualização, um método longo são 350 linhas de código. Eu tenho meu código escrito para que ele lide com os parâmetros - classificando / filtrando o conjunto de consultas e, pouco a pouco, faz algum processamento nos objetos que minha consulta retornou.
Portanto, o processamento é principalmente agregação condicional, que possui regras complexas o suficiente que não podem ser feitas facilmente no banco de dados, portanto, algumas variáveis declaradas fora do loop principal são alteradas durante o loop.
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
Então, de acordo com a teoria, devo fatorar todo o código em métodos menores, para que eu tenha o método view como tendo no máximo uma página.
No entanto, tendo trabalhado em várias bases de código no passado, às vezes acho que torna o código menos legível, quando você precisa pular constantemente de um método para o próximo, descobrindo todas as partes dele, mantendo o método mais externo em sua cabeça.
Acho que, com um método longo e bem formatado, é possível ver a lógica mais facilmente, pois ela não está sendo ocultada nos métodos internos.
Eu poderia fatorar o código em métodos menores, mas muitas vezes há um loop interno sendo usado para duas ou três coisas, por isso resultaria em código mais complexo, ou métodos que não fazem uma coisa, mas duas ou três (alternativamente Eu poderia repetir loops internos para cada tarefa, mas haverá um impacto no desempenho).
Existe um caso em que métodos longos nem sempre são ruins? Há sempre um caso para os métodos de escrita, quando eles serão usados apenas em um só lugar?
ATUALIZAÇÃO: Parece que eu fiz essa pergunta há mais de um ano.
Então, refatorei o código após a resposta (mista) aqui, dividi-o em métodos. É um aplicativo Django que recupera conjuntos complexos de objetos relacionados do banco de dados, portanto o argumento de teste está fora (provavelmente levaria a maior parte do ano para criar objetos relevantes para os casos de teste. Eu tenho um tipo "isso precisa ser feito ontem" ambiente de trabalho antes que alguém reclame). Corrigir bugs nessa parte do código é marginalmente mais fácil agora, mas não em massa.
antes :
#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
agora:
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