Поэтому, оглядываясь назад, я заметил несколько комментариев о том, что длинные методы являются плохой практикой.
Я не уверен, что всегда согласен с тем, что длинные методы плохие (и хотел бы узнать мнение других).
Например, у меня есть несколько представлений Django, которые выполняют небольшую обработку объектов перед отправкой их в представление, длинный метод состоит из 350 строк кода. Мой код написан так, чтобы он работал с параметрами - сортировка / фильтрация набора запросов, затем по крупицам выполняется некоторая обработка объектов, возвращенных моим запросом.
Таким образом, обработка в основном является условной агрегацией, которая имеет достаточно сложные правила, которые не могут быть легко выполнены в базе данных, поэтому у меня есть некоторые переменные, объявленные вне основного цикла, которые затем изменяются во время цикла.
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
Таким образом, в соответствии с теорией, я должен разложить весь код на более мелкие методы, чтобы у меня был метод view с максимальной длиной в одну страницу.
Однако, работая в прошлом с различными базами кода, я иногда обнаруживаю, что он делает код менее читабельным, когда вам нужно постоянно переходить от одного метода к другому, выясняя все его части, сохраняя при этом самый внешний метод в своей голове.
Я обнаружил, что с длинным методом, который хорошо отформатирован, вы можете легче увидеть логику, так как она не скрывается во внутренних методах.
Я мог бы разделить код на более мелкие методы, но часто есть внутренний цикл, используемый для двух или трех вещей, так что это приведет к более сложному коду или методам, которые не выполняют одну вещь, а две или три (альтернативно Я мог бы повторить внутренние циклы для каждой задачи, но тогда будет падение производительности).
Так есть ли случаи, когда длинные методы не всегда плохи? Всегда ли есть случаи написания методов, когда они будут использоваться только в одном месте?
ОБНОВЛЕНИЕ: Похоже, я задавал этот вопрос более года назад.
Поэтому я реорганизовал код после (смешанного) ответа, разделив его на методы. Это приложение Django, которое извлекает сложные наборы связанных объектов из базы данных, поэтому аргумент тестирования отсутствует (вероятно, потребовалось бы большую часть года для создания соответствующих объектов для тестовых случаев. У меня есть тип «это нужно сделать вчера») рабочая среда, прежде чем кто-либо жалуется). Исправлять ошибки в этой части кода теперь немного легче, но не так массово.
до :
#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
в настоящее время:
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