Рефакторинг метода формирования отчёта

В исходнике report может остаться неинициализированным при неизвестном типе. Вынесите ветви в отдельные методы и явно обработайте неподдерживаемые значения.

Короткий ответ

Что ответить на собеседовании

В исходнике report может остаться неинициализированным при неизвестном типе. Вынесите ветви в отдельные методы и явно обработайте неподдерживаемые значения.

Подробный разбор

Ответ с пояснениями

Условие

Метод myBusinessLogic получает объект inputData и в зависимости от его типа (CUSTOMER, NONE_CUSTOMER, VIP) формирует объект Report. Требуется переписать метод, устранив дублирование, повысив читаемость и подготовив его к дальнейшему расширению.

class SuperService {
    public Report myBusinessLogic(InputData inputData) {
        Report report;

        if (inputData.getType().equals("CUSTOMER")) {
            report = doWorkWithData(inputData);
        } else if (inputData.getType().equals("NONE_CUSTOMER")) {
            // 20 строк кода
            report = result;
        } else if (inputData.getType().equals("VIP")) {
            // 40 строк кода
            report = result;
        }

        return report;
    }
}

Ответ

В исходнике report может остаться неинициализированным при неизвестном типе. Вынесите ветви в отдельные методы и явно обработайте неподдерживаемые значения.

public Report myBusinessLogic(InputData data) {
    Objects.requireNonNull(data);
    String type = Objects.requireNonNull(data.getType());
    switch (type) {
        case "CUSTOMER": return doWorkWithData(data);
        case "NONE_CUSTOMER": return buildNonCustomerReport(data);
        case "VIP": return buildVipReport(data);
        default: throw new IllegalArgumentException("Unsupported type");
    }
}

Два новых метода содержат существующие 20 и 40 строк логики: их содержание в условии отсутствует, поэтому его нельзя восстановить. Для закрытого набора типов полезен enum; при независимом расширении — registry стратегий. Не нужно вводить сложную иерархию только ради трёх коротких ветвей.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее