[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-arkhitektura-prilozheniy-chto-oznachayut-printsipy-dry-kiss-i-yagni":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},124,"chto-oznachayut-printsipy-dry-kiss-i-yagni",3,"arkhitektura-prilozheniy","Архитектура приложений","🏗️","Что означают принципы DRY, KISS и YAGNI","DRY, KISS и YAGNI — три базовых принципа проектирования, направленных на снижение сложности и повышение поддерживаемости системы.\n\n### DRY (Don't Repeat Yourself) — «Не повторяйся»\n\nКаждый фрагмент знания должен иметь единственное, непротиворечивое, авторитетное представление в системе.\n\n- Дублирование кода ведёт к рассинхронизации при изменениях.\n- Относится не только к коду, но и к конфигурации, схемам БД, документации.\n- Важно: DRY — это не «любой одинаковый код надо выносить». Если два фрагмента кода случайно совпадают, но описывают разные концепции, объединять их не нужно. Иначе при изменении одной концепции сломается другая.\n\n\u003Cdetails>\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Плохо: дублирование логики валидации\npublic class PaymentService {\n    public void createPayment(PaymentRequest req) {\n        if (req.getAmount().compareTo(BigDecimal.ZERO) \u003C= 0)\n            throw new IllegalArgumentException(\"Amount must be positive\");\n        \u002F\u002F ...\n    }\n\n    public void refundPayment(RefundRequest req) {\n        if (req.getAmount().compareTo(BigDecimal.ZERO) \u003C= 0) \u002F\u002F дубль!\n            throw new IllegalArgumentException(\"Amount must be positive\");\n        \u002F\u002F ...\n    }\n}\n\n\u002F\u002F Хорошо: единое место для правила\npublic class Money {\n    public Money(BigDecimal amount) {\n        if (amount.compareTo(BigDecimal.ZERO) \u003C= 0)\n            throw new IllegalArgumentException(\"Amount must be positive\");\n        this.amount = amount;\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### KISS (Keep It Simple, Stupid) — «Делай проще»\n\n- Простое решение лучше сложного, если оно решает задачу.\n- Не стоит внедрять микросервисы, CQRS и Event Sourcing для CRUD-приложения с 3 экранами.\n- Предпочитайте понятный код «умному» коду.\n- Архитектурная сложность должна быть оправдана бизнес-требованиями.\n\n### YAGNI (You Aren't Gonna Need It) — «Вам это не понадобится»\n\n- Не реализуйте функциональность «на будущее».\n- Проектируйте расширяемую архитектуру, но реализуйте только то, что нужно сейчас.\n- Преждевременная оптимизация и преждевременное усложнение — враги хорошей архитектуры.\n\n```java\n\u002F\u002F YAGNI нарушение: написали поддержку 5 баз данных, хотя нужна только PostgreSQL\npublic interface DatabaseAdapter { }\npublic class PostgresAdapter implements DatabaseAdapter { }\npublic class MongoAdapter implements DatabaseAdapter { }      \u002F\u002F не нужен\npublic class CassandraAdapter implements DatabaseAdapter { }  \u002F\u002F не нужен\npublic class RedisAdapter implements DatabaseAdapter { }      \u002F\u002F не нужен\npublic class ElasticAdapter implements DatabaseAdapter { }    \u002F\u002F не нужен\n```\n\n### Взаимосвязь принципов\n\nDRY, KISS и YAGNI дополняют друг друга: DRY устраняет дублирование, KISS предостерегает от излишней сложности, а YAGNI — от избыточной функциональности. Вместе они помогают строить системы, которые легко понимать и поддерживать.\n\n> **На собеседовании:** Интервьюер ожидает реальные примеры нарушения каждого принципа из вашего опыта, а не просто расшифровку аббревиатур. Частая ошибка — трактовать DRY как «никогда не дублировать код», забывая, что случайное совпадение — не дублирование знания.","","junior",[15,16,17],"best-practices","design-principles","architecture",[],null,{"title":21,"description":22,"ogTitle":21,"ogDescription":23,"keywords":24,"schemaAnswer":32,"featuredSnippetReady":33},"Принципы DRY, KISS и YAGNI — Gymterview","DRY — не повторяйся, KISS — делай проще, YAGNI — вам это не понадобится. Объяснение принципов проектирования с примерами на Java.","DRY — не повторяйся, KISS — делай проще, YAGNI — вам это не понадобится. Примеры и объяснения.",[25,26,27,28,29,30,31],"DRY","KISS","YAGNI","Don't Repeat Yourself","Keep It Simple","принципы проектирования","Java","DRY (Don't Repeat Yourself) — каждый фрагмент знания должен иметь единственное представление в системе; дублирование ведёт к рассинхронизации, но случайно совпадающий код разных концепций объединять не нужно. KISS (Keep It Simple, Stupid) — простое решение лучше сложного, архитектурная сложность должна быть оправдана бизнес-требованиями. YAGNI (You Aren't Gonna Need It) — не реализуйте функциональность «на будущее», проектируйте расширяемую архитектуру, но реализуйте только то, что нужно сейчас.",true]