- Функция process_checkout была слишком большой и выполняла сразу несколько обязанностей (парсинг, валидация, расчёты, формирование результата).
- Повторяющиеся магические числа (0.21, 0.10, 200, 50 и т.д.).
- Сложная вложенность условий при расчёте скидки.
- Дублирование циклов по items (валидация и подсчёт subtotal).
- Нарушение принципов DRY и KISS.
-
Вынесены все магические числа в именованные константы в начале файла.
-
Логика разбита на маленькие функции с одной ответственностью:
- parse_request — извлечение данных
- validate_request — вся валидация
- calculate_subtotal — подсчёт суммы
- calculate_discount — расчёт скидки
- generate_order_id — генерация ID заказа
-
Основная функция process_checkout теперь короткая и читается сверху вниз как сценарий.
-
Упрощена обработка отрицательной суммы после скидки с помощью max().
-
Все изменения делались маленькими шагами с постоянной проверкой тестов.
После рефакторинга код стал значительно проще читать, понимать и расширять, при этом поведение полностью сохранено — все тесты продолжают проходить.