Оглядаючись раніше, я помітив деякі коментарі щодо того, що довгі методи є поганою практикою.
Я не впевнений, що завжди погоджуюся, що довгі методи погані (і хотілося б думки інших).
Наприклад, у мене є кілька видів 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
Отже, згідно з теорією, я повинен розподілити весь код на більш дрібні методи, щоб у мене метод перегляду був максимальним на одній сторінці.
Однак, працюючи над різними базами коду в минулому, я іноді вважаю, що це робить код менш читабельним, коли вам потрібно постійно переходити від одного методу до іншого, з'ясовуючи всі його частини, зберігаючи при цьому самий зовнішній метод.
Я вважаю, що, маючи довгий метод, добре відформатований, ви можете бачити логіку легше, оскільки вона не приховується у внутрішніх методах.
Я міг би поділити код на більш дрібні методи, але часто існує внутрішня петля для двох-трьох речей, тому це призведе до більш складного коду, або методів, які роблять не одну справу, а дві-три (як альтернатива Я можу повторити внутрішні петлі для кожного завдання, але тоді буде хіт виконання).
То чи існує випадок, коли довгі методи не завжди погані? Чи завжди є такі способи написання, коли вони будуть використовуватися лише в одному місці?
ОНОВЛЕННЯ: Схоже, я задав це питання більше року тому.
Тому я відновив код після (змішаної) відповіді тут, розділив його на методи. Це додаток 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