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

Ответ

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

Ключевая идея:

Каждая часть знания в системе должна иметь единственное, однозначное и авторитетное представление.

Это относится не только к дублированию кода, но и к дублированию логики, данных, конфигурации и документации.

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

Плохо (повторение логики валидации):

func CreateUser(name string, email string) error {
    // Блок валидации
    if len(name) < 3 {
        return errors.New("name is too short")
    }
    if !strings.Contains(email, "@") {
        return errors.New("invalid email format")
    }
    // ... логика создания пользователя
    return nil
}

func UpdateUser(name string, email string) error {
    // Такой же блок валидации
    if len(name) < 3 {
        return errors.New("name is too short")
    }
    if !strings.Contains(email, "@") {
        return errors.New("invalid email format")
    }
    // ... логика обновления пользователя
    return nil
}

Хорошо (логика вынесена в отдельную функцию):

func validateUserData(name string, email string) error {
    if len(name) < 3 {
        return errors.New("name is too short")
    }
    if !strings.Contains(email, "@") {
        return errors.New("invalid email format")
    }
    return nil
}

func CreateUser(name string, email string) error {
    if err := validateUserData(name, email); err != nil {
        return err
    }
    // ... логика создания пользователя
    return nil
}

func UpdateUser(name string, email string) error {
    if err := validateUserData(name, email); err != nil {
        return err
    }
    // ... логика обновления пользователя
    return nil
}

Преимущества следования DRY:

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

Когда применять с осторожностью?
Слепое следование DRY может привести к созданию плохих или преждевременных абстракций. Иногда небольшое дублирование кода (принцип WET — Write Everything Twice) предпочтительнее, чем сложная и запутанная абстракция, которая связывает части системы, не имеющие на самом деле ничего общего.