Вопрос проверяет понимание борьбы с дублированием и умение отличать повторение кода от повторения логики.
DRY означает «не повторяйся» и направлен на устранение дублирования знаний в коде. Если одна и та же логика описана в нескольких местах, изменения становятся дорогими и рискованными. DRY помогает уменьшить количество ошибок и упростить поддержку. При этом принцип не требует устранять любое визуальное сходство кода. Важно избегать дублирования смысла, а не строк.
Принцип DRY часто понимают неправильно, сводя его к борьбе с копипастом, но его смысл глубже.
Дублирование — это:
повторение бизнес-правил
одинаковые условия в разных местах
схожая логика с одинаковым смыслом
Пример проблемы:
изменение требования требует правок в нескольких местах
одно место обновили, другое забыли
DRY реализуется через:
вынос общей логики в функции
использование общих типов и моделей
переиспользуемые сервисы
Пример:
// Плохо: логика повторяется
if user.age >= 18 { /* ... */ }
// Хорошо: логика централизована
func isAdult(_ user: User) -> Bool {
user.age >= 18
}
Избыточное применение DRY приводит к:
сложным универсальным абстракциям
сильной связности
ухудшению читаемости
Иногда дублирование допустимо, если логика может эволюционировать независимо.
DRY снижает количество ошибок и упрощает изменения, но требует осознанного применения и баланса.