Рефакторинг модуля обработки заказов order_processing.py. Исходный код содержал функцию для расчета стоимости заказа с учетом скидок и налогов, но имел несколько проблем качества (code smells).
Функция process_checkout() занимала 52 строки и выполняла слишком много задач:
- Валидация входных данных
- Расчет суммы заказа
- Применение скидок
- Расчет налогов
- Формирование ответа
В коде были разбросаны числовые и строковые константы:
- Проценты скидок:
0.10,0.20,0.05 - Процент налога:
0.21 - Пороговые значения:
200,100,50,10 - Строковые константы:
"USD","SAVE10","SAVE20","VIP"
Большой блок if-elif-elif для обработки купонов (9 строк) с вложенными условиями, что затрудняло понимание логики.
Множественные проверки if value <= 0 для цены и количества, а также похожие структуры вызова raise ValueError.
Функция занималась одновременно низкоуровневой валидацией данных, бизнес-логикой расчета и форматированием результата.
# Было:
discount = int(subtotal * 0.10)
currency = "USD"
# Стало:
DISCOUNT_SAVE10 = 0.10
DEFAULT_CURRENCY = "USD"
discount = int(subtotal * DISCOUNT_SAVE10)
currency = DEFAULT_CURRENCY