Entonces, mirando alrededor, noté algunos comentarios sobre los métodos largos como una mala práctica.
No estoy seguro de estar siempre de acuerdo en que los métodos largos son malos (y me gustaría recibir opiniones de otros).
Por ejemplo, tengo algunas vistas de Django que procesan un poco los objetos antes de enviarlos a la vista, un método largo de 350 líneas de código. Tengo mi código escrito para que se ocupe de los parámetros: ordenar / filtrar el conjunto de consultas, luego, poco a poco, se procesa un poco en los objetos que mi consulta ha devuelto.
Entonces, el procesamiento es principalmente una agregación condicional, que tiene reglas suficientemente complejas que no se pueden hacer fácilmente en la base de datos, por lo que tengo algunas variables declaradas fuera del bucle principal y luego se modifican durante el bucle.
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
Entonces, de acuerdo con la teoría, debo factorizar todo el código en métodos más pequeños, de modo que tenga el método de visualización como máximo de una página.
Sin embargo, después de haber trabajado en varias bases de código en el pasado, a veces encuentro que hace que el código sea menos legible, cuando necesitas saltar constantemente de un método a otro para descubrir todas las partes, mientras mantienes el método más externo en tu cabeza.
Encuentro que con un método largo que está bien formateado, puede ver la lógica más fácilmente, ya que no se oculta en los métodos internos.
Podría factorizar el código en métodos más pequeños, pero a menudo se usa un bucle interno para dos o tres cosas, por lo que daría como resultado un código más complejo o métodos que no hacen una cosa sino dos o tres (alternativamente Podría repetir bucles internos para cada tarea, pero luego habrá un golpe de rendimiento).
Entonces, ¿hay algún caso en que los métodos largos no siempre sean malos? ¿Siempre hay un caso para los métodos de escritura, cuando solo se usarán en un lugar?
ACTUALIZACIÓN: Parece que hice esta pregunta hace más de un año.
Entonces refactoré el código después de la respuesta (mixta) aquí, lo dividí en métodos. Es una aplicación de Django que recupera conjuntos complejos de objetos relacionados de la base de datos, por lo que el argumento de la prueba está fuera (probablemente habría llevado la mayor parte del año crear objetos relevantes para los casos de prueba. Tengo un tipo de "esto se hizo ayer" ambiente de trabajo antes de que nadie se queje). Corregir errores en esa parte del código es marginalmente más fácil ahora, pero no de manera masiva.
antes de :
#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
ahora:
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