Что такое «загроможденный метод» (Long Method) и как его рефакторить?

«Что такое «загроможденный метод» (Long Method) и как его рефакторить?» — вопрос из категории Other, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Загроможденный метод — это метод, нарушающий принцип единственной ответственности (SRP), содержащий слишком много логики, что усложняет его понимание, тестирование и поддержку.

Признаки:

  • Большое количество строк кода (обычно > 10-15).
  • Несколько уровней абстракции в одном методе.
  • Множество комментариев, разделяющих логические блоки.

Пример до рефакторинга (Java):

public void processOrder(Order order) {
    // Валидация
    if (order == null) throw new IllegalArgumentException();
    if (order.getItems().isEmpty()) throw new IllegalStateException();

    // Логика обработки товаров
    for (Item item : order.getItems()) {
        inventoryService.checkStock(item);
        item.setProcessed(true);
    }

    // Расчет скидки
    double discount = discountService.calculate(order);
    order.setDiscount(discount);

    // Сохранение
    orderRepository.save(order);

    // Отправка уведомления
    notificationService.sendEmail(order.getCustomer());
}

Рефакторинг (Извлечение методов):

public void processOrder(Order order) {
    validateOrder(order);
    processItems(order);
    applyDiscount(order);
    saveOrder(order);
    notifyCustomer(order);
}

private void validateOrder(Order order) { /* ... */ }
private void processItems(Order order) { /* ... */ }
private void applyDiscount(Order order) { /* ... */ }
private void saveOrder(Order order) { /* ... */ }
private void notifyCustomer(Order order) { /* ... */ }

Результат: Каждый метод имеет одну четкую цель, код становится читаемым, тестируемым и пригодным для повторного использования.