← Назад к вопросам

Что такое DRY?

1.0 Junior🔥 241 комментариев
#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

DRY (Dont Repeat Yourself) — Принцип единственного источника истины

DRY — это фундаментальный принцип разработки программного обеспечения, который гласит: каждое знание должно иметь единственное, однозначное представление в системе. Другими словами, не копируй код, логику или данные — выноси их в одно место и переиспользуй.

Основная идея

Проблема дублирования:

// ❌ Плохо — код повторяется
function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new Exception("Invalid email");
    }
}

function processRegistration($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new Exception("Invalid email");
    }
    // ... регистрация
}

function updateProfile($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new Exception("Invalid email");
    }
    // ... обновление профиля
}

Решение — применяем DRY:

// ✅ Хорошо — одно место для валидации
function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email");
    }
}

function processRegistration($email) {
    validateEmail($email);
    // ... регистрация
}

function updateProfile($email) {
    validateEmail($email);
    // ... обновление профиля
}

Преимущества DRY

  • Легче менять — изменил в одном месте, эффект везде
  • Меньше ошибок — исправил баг в функции, все её использующие получат fix
  • Читаемость — код понятнее и короче
  • Тестирование — проверяешь логику один раз
  • Поддерживаемость — намного проще поддерживать проект

Где применяется DRY

  • Функции и методы — выносим повторяющуюся логику
  • Константы и конфиги — не хардкодим строки, числа, URL
  • Запросы в БД — используем репозитории, не копируем SQL
  • Стили и шаблоны — наследование в классах, миксины в CSS
  • Бизнес-правила — одна реализация проверок, валидаций

DRY и архитектура

// ✅ Правильно — сервис содержит бизнес-логику
class UserService {
    public function validateAndRegister(string $email, string $password) {
        $this->validateEmail($email);
        $this->validatePassword($password);
        return $this->createUser($email, $password);
    }
}

// ✅ Контроллер просто вызывает сервис
class AuthController {
    public function register(Request $request, UserService $service) {
        return $service->validateAndRegister(
            $request->input("email"),
            $request->input("password")
        );
    }
}

Когда НЕ переусложнять

Важно не путать DRY с YAGNI (You Arent Gonna Need It). Если код повторяется только в 2 местах и вероятность изменений низкая, можно оставить как есть. Правило 3: если повторяется 3+ раза — точно нужно рефакторить.

Что такое DRY? | PrepBro