--- sidebar_position: 7 --- # Принципы разработки ## YAGNI _You Aren’t Gonna Need It / Вам это не понадобится_ Принцип YAGNI (англ. You Aren’t Gonna Need It — «Вам это не понадобится») — это концепция из методологии разработки программного обеспечения, которая гласит, что не следует добавлять функциональность в код до тех пор, пока она действительно не потребуется. Этот принцип является частью экстремального программирования (XP) и тесно связан с другими принципами, такими как KISS (Keep It Simple, Stupid) и DRY (Don’t Repeat Yourself). ### Основные идеи YAGNI: 1. **Избегание преждевременной оптимизации:** - Не стоит тратить время на написание кода, который, возможно, никогда не будет использован. - Это помогает избежать усложнения системы и снижает вероятность внесения ошибок. 2. **Фокус на текущих требованиях:** - Разработчики должны сосредоточиться на реализации только тех функций, которые необходимы прямо сейчас. - Это позволяет быстрее выпускать рабочие версии продукта и получать обратную связь от пользователей. 3. **Упрощение кода:** - YAGNI способствует написанию более простого и понятного кода, так как в нем отсутствуют лишние элементы. - Это облегчает поддержку и модификацию кода в будущем. 4. **Экономия времени и ресурсов:** - Не нужно тратить время на разработку и тестирование функциональности, которая может оказаться ненужной. - Это позволяет сосредоточиться на действительно важных задачах. ### Преимущества YAGNI: - Снижение сложности кода. - Уменьшение времени на разработку. - Более гибкая реакция на изменения требований. - Упрощение тестирования и поддержки. ### Когда YAGNI не применим: - Если есть четкое понимание, что функциональность точно понадобится в ближайшем будущем. - Если добавление функциональности позже будет значительно дороже или сложнее. ### Дополнительно Этот принцип прост и очевиден, но ему далеко не все следуют. Если пишете код, то будьте уверены, что он вам понадобится. Не пишите код, если думаете, что он пригодится позже. \ Этот принцип применим при рефакторинге. Если вы занимаетесь рефакторингом метода, класса или файла, не бойтесь удалять лишние методы. Даже если раньше они были полезны – теперь они не нужны. \ Может наступить день, когда они снова понадобятся – тогда вы сможете воспользоваться git-репозиторием, чтобы воскресить их из мертвых. ## DRY _Don’t Repeat Yourself / Не повторяйтесь_ Принцип DRY (англ. Don’t Repeat Yourself — «Не повторяйся») — это один из ключевых принципов разработки программного обеспечения, который направлен на минимизацию дублирования кода. Основная идея заключается в том, что каждая часть знания или логики в системе должна иметь единственное, однозначное и авторитетное представление в коде. ### Основные идеи DRY: 1. **Устранение дублирования:** - Если один и тот же код или логика повторяются в нескольких местах, это увеличивает сложность поддержки и повышает риск ошибок. - Вместо этого следует выносить повторяющийся код в отдельные функции, модули или классы. 2. **Единая точка изменения:** - Если логика должна быть изменена, это нужно сделать только в одном месте, а не во всех местах, где она используется. - Это упрощает поддержку и снижает вероятность ошибок. 3. **Повышение читаемости и поддерживаемости:** - Код становится более компактным и понятным, так как логика не размазана по всей кодовой базе. ### Преимущества DRY: 1. **Снижение ошибок:** - Меньше вероятность того, что изменения в логике будут внесены только в одном месте, а в других — забыты. 2. **Упрощение поддержки:** - Легче вносить изменения, так как логика сосредоточена в одном месте. 3. **Улучшение читаемости:** - Код становится более структурированным и понятным. 4. **Экономия времени:** - Не нужно копировать и вставлять код, а также тестировать его в нескольких местах. ### Когда DRY не следует применять слепо: 1. **Избыточная абстракция:** - Иногда попытка устранить дублирование может привести к созданию сложных и ненужных абстракций, которые усложняют понимание кода. 2. **Микрооптимизации:** - Не стоит применять DRY для устранения дублирования, если это незначительные фрагменты кода, которые вряд ли будут изменяться. 3. **Разные контексты:** - Если дублирующийся код используется в разных контекстах и может изменяться независимо, то его объединение может привести к проблемам. ### Связь с другими принципами: - **KISS (Keep It Simple, Stupid):** DRY помогает упрощать код, устраняя ненужное дублирование. - **YAGNI (You Aren’t Gonna Need It):** DRY не следует применять для создания абстракций, которые могут понадобиться в будущем, но не нужны сейчас. ### Дополнительно Эта концепция была впервые сформулирована в книге Энди Ханта и Дэйва Томаса «Программист-прагматик: путь от подмастерья к мастеру».\ Идея вращается вокруг единого источника правды (single source of truth — SSOT). Что это вообще такое? \ Дублирование кода – пустая трата времени и ресурсов. Вам придется поддерживать одну и ту же логику и тестировать код сразу в двух местах, причем если вы измените код в одном месте, его нужно будет изменить и в другом. \ В большинстве случаев дублирование кода происходит из-за незнания системы. Прежде чем что-либо писать, проявите прагматизм: осмотритесь. Возможно, эта функция где-то реализована. Возможно, эта бизнес-логика существует в другом месте. Повторное использование кода – всегда разумное решение. ## KISS _Keep It Simple, Stupid / Будь проще_ Принцип KISS (англ. Keep It Simple, Stupid — «Делай проще, тупица») — это концепция в разработке программного обеспечения, которая подчеркивает важность простоты и минимализма в проектировании и реализации систем. Основная идея заключается в том, что простые решения чаще всего являются лучшими, так как их легче понимать, поддерживать и модифицировать. ### Основные идеи KISS: 1. **Упрощение кода:** - Код должен быть настолько простым, насколько это возможно, но не проще. - Сложные конструкции и избыточные абстракции следует избегать. 2. **Минимизация сложности:** - Чем проще система, тем меньше вероятность возникновения ошибок и тем легче её поддерживать. - Простота также облегчает понимание кода новыми разработчиками. 3. **Фокус на решении задачи:** - Не стоит добавлять функциональность, которая не требуется для решения текущей задачи. - Это связано с принципом **YAGNI** (You Aren’t Gonna Need It). 4. **Избегание «умного» кода:** - Код, который выглядит «умным» (например, с использованием сложных языковых конструкций или оптимизаций), часто сложен для понимания и поддержки. - Лучше писать код, который легко читать и понимать. ### Преимущества KISS: 1. **Упрощение поддержки:** - Простой код легче понимать и изменять, что снижает затраты на поддержку. - Снижение вероятности ошибок: - Чем меньше сложность, тем меньше вероятность допустить ошибку. 2. **Ускорение разработки:** - Простые решения быстрее реализуются и тестируются. 3. **Улучшение читаемости:** - Код становится более понятным для других разработчиков, что особенно важно в командной работе. ### Когда KISS не следует применять слепо: 1. **Оптимизация производительности:** - Иногда для достижения необходимой производительности требуется более сложный код. - Однако даже в таких случаях следует стремиться к балансу между простотой и эффективностью. 2. **Специфические требования:** - В некоторых случаях сложные решения могут быть оправданы, если они соответствуют бизнес-требованиям или ограничениям системы. ### Связь с другими принципами: - **YAGNI (You Aren’t Gonna Need It):** KISS поддерживает идею о том, что не следует добавлять ненужную функциональность. - **DRY (Don’t Repeat Yourself):** KISS помогает избегать избыточного дублирования, но не за счет усложнения кода. - **SOLID:** KISS дополняет принципы SOLID, делая акцент на простоте и ясности кода. ### Дополнительно Этот принцип был разработан ВМС США в 1960 году. Этот принцип гласит, что простые системы будут работать лучше и надежнее.\ Применительно к разработке ПО он значит следующее – не придумывайте к задаче более сложного решения, чем ей требуется.\ Иногда самое разумное решение оказывается и самым простым. Написание производительного, эффективного и простого кода – это прекрасно. 🚀 **_Источник: DeepSeek_** dДополнительный источник: [https://habr.com/ru/companies/itelma/articles/546372/](https://habr.com/ru/companies/itelma/articles/546372/)