Какой основной принцип используется для устранения дублирования кода

«Какой основной принцип используется для устранения дублирования кода» — вопрос из категории Паттерны, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основной принцип для устранения дублирования кода — DRY (Don't Repeat Yourself), что переводится как «не повторяйся». Его суть в том, чтобы каждая часть знания или логики в системе имела единственное, однозначное и авторитетное представление.

На практике это достигается путём вынесения повторяющегося кода в переиспользуемые абстракции.

Основной метод: Рефакторинг в функцию/метод

Самый распространённый способ следовать DRY — инкапсулировать повторяющуюся логику в отдельную функцию или метод.

До (плохо):

# Расчёт скидки для обычного клиента
order_total_1 = 1200
if order_total_1 > 1000:
    final_price_1 = order_total_1 * 0.9
else:
    final_price_1 = order_total_1

# Такой же расчёт для VIP-клиента
order_total_2 = 2500
if order_total_2 > 1000:
    final_price_2 = order_total_2 * 0.9
else:
    final_price_2 = order_total_2

После (хорошо):

def calculate_discounted_price(total, threshold=1000, discount=0.1):
    """Применяет скидку, если сумма заказа превышает порог."""
    if total > threshold:
        return total * (1 - discount)
    return total

final_price_1 = calculate_discounted_price(1200)
final_price_2 = calculate_discounted_price(2500)

Другие способы реализации DRY:

  • Классы и наследование: Общая логика выносится в базовый класс, а дочерние классы её наследуют.
  • Декораторы: Используются для добавления сквозной функциональности (логирование, кэширование, проверка прав) к нескольким функциям.
  • Контекстные менеджеры (with): Для повторяющихся операций по настройке и очистке ресурсов (например, открытие/закрытие файлов или транзакций БД).
  • Конфигурационные файлы: Вынесение констант и настроек из кода в отдельные файлы (.env, .yaml, .json).

Почему это важно?

  • Поддерживаемость: Изменить логику нужно только в одном месте.
  • Надёжность: Снижается риск ошибок, так как исправление в одном месте применяется везде.
  • Читаемость: Код становится более декларативным и понятным.