Ответ
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) предпочтительнее, чем сложная и запутанная абстракция, которая связывает части системы, не имеющие на самом деле ничего общего.