Что такое принцип DRY в разработке?

«Что такое принцип DRY в разработке?» — вопрос из категории Архитектура, который задают на 35% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

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

  • Снижение стоимости поддержки: Изменение требуется внести только в одном месте.
  • Уменьшение ошибок: Исправление в одном месте гарантирует, что логика будет исправлена везде.
  • Повышение читаемости: Код становится менее раздутым и более понятным.
  • Облегчение тестирования: Логика, сосредоточенная в одном месте, проще покрывается тестами.

Пример нарушения и исправления:

// НАРУШЕНИЕ DRY: Одна и та же формула расчёта налога дублируется.
class OrderProcessor {
    public function calculateTax($amount) {
        return $amount * 0.20; // Логика налога 20%
    }
}

class InvoiceGenerator {
    public function calculateTax($amount) {
        return $amount * 0.20; // Та же самая логика налога
    }
}
// СОБЛЮДЕНИЕ DRY: Логика вынесена в единственный авторитетный источник.
class TaxCalculator {
    private const TAX_RATE = 0.20;

    public static function calculate($amount) {
        return $amount * self::TAX_RATE;
    }
}

class OrderProcessor {
    public function calculateTax($amount) {
        return TaxCalculator::calculate($amount);
    }
}

class InvoiceGenerator {
    public function calculateTax($amount) {
        return TaxCalculator::calculate($amount);
    }
}

Важный нюанс: Принцип DRY применяется к знанию и бизнес-логике, а не к случайно похожему коду. Иногда структурное дублирование кода (например, шаблонные методы в разных классах) менее вредно, чем создание неправильной, чрезмерно сложной абстракции только ради устранения повторения.

Видео-ответы