Ответ
YAGNI (You Aren't Gonna Need It) — это принцип экстремального программирования (XP), который предписывает не добавлять функциональность, пока она не станет абсолютно необходимой. Его цель — борьба с преждевременной оптимизацией и избыточным усложнением архитектуры.
Суть принципа: Не тратьте время на написание кода «на будущее», основываясь на предположениях о том, что может понадобиться. Добавляйте фичи только при появлении явного, актуального требования.
Пример нарушения и следования принципу:
// ❌ Нарушение YAGNI: "А вдруг нам понадобится несколько форматов?"
class DataExporter {
enum Format {
case json, xml, csv, protobuf // protobuf и csv пока не нужны
}
func exportData(format: Format) -> Data { ... }
}
// ✅ Следование YAGNI: Реализуем только то, что нужно сейчас.
class DataExporter {
func exportAsJSON() -> Data { ... }
// Методы для xml, csv добавятся ПОСЛЕ появления требований к ним.
}
Преимущества следования YAGNI:
- Снижение сложности: Меньше кода → проще читать, тестировать и поддерживать.
- Быстрая доставка: Команда фокусируется на реализации текущих требований, а не гипотетических.
- Гибкость: Отсутствие «забетонированных» решений позволяет легче адаптировать код к реальным, а не предполагаемым будущим изменениям.
- Избегание waste: Не тратятся ресурсы на разработку, тестирование и поддержку неиспользуемого функционала.
YAGNI не означает отказ от проектирования. Он означает отказ от реализации функциональности, не подтверждённой текущими нуждами. Архитектура должна допускать изменения, но не содержать лишних абстракций.