[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-arkhitektura-prilozheniy-chto-takoe-coupling-i-cohesion-svyazannost-i-stseplennost":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":19,"progress":20,"seo":21},125,"chto-takoe-coupling-i-cohesion-svyazannost-i-stseplennost",3,"arkhitektura-prilozheniy","Архитектура приложений","🏗️","Что такое Coupling и Cohesion (связанность и сцепленность)","**Coupling (связанность \u002F зацепление)** — степень взаимозависимости между модулями. Чем ниже coupling, тем лучше: модули можно изменять и развивать независимо.\n\n**Cohesion (сцепленность \u002F связность)** — степень, в которой элементы внутри одного модуля принадлежат друг другу и работают над одной задачей. Чем выше cohesion, тем лучше: модуль сфокусирован и понятен.\n\nИдеал: **Low Coupling + High Cohesion**. По аналогии: хорошая команда — это когда каждый отдел занимается своим делом (high cohesion), а между отделами минимум бюрократии (low coupling).\n\n### Наглядное сравнение\n\n```\nПлохо: High Coupling + Low Cohesion\n\n┌──────────────────┐     ┌──────────────────┐\n│  Модуль A        │────▶│  Модуль B        │\n│  - платежи       │◀────│  - клиенты       │\n│  - уведомления   │────▶│  - отчёты        │\n│  - часть отчётов │◀────│  - часть платежей│\n└──────────────────┘     └──────────────────┘\n  (всё в куче)             (всё в куче)\n\nХорошо: Low Coupling + High Cohesion\n\n┌──────────────┐   event   ┌──────────────┐\n│ Модуль       │──────────▶│ Модуль       │\n│ Платежей     │           │ Уведомлений  │\n│ (всё про     │           │ (всё про     │\n│  платежи)    │           │  уведомления)│\n└──────────────┘           └──────────────┘\n```\n\n### Типы связанности (от худшей к лучшей)\n\n1. **Content coupling** — один модуль напрямую изменяет данные другого.\n2. **Common coupling** — модули разделяют глобальные данные.\n3. **Control coupling** — один модуль управляет логикой другого через флаги.\n4. **Stamp coupling** — модули обмениваются сложными структурами данных, используя лишь часть.\n5. **Data coupling** — модули обмениваются только необходимыми примитивными данными.\n6. **Message coupling** — модули общаются только через сообщения\u002Fсобытия (наилучший вариант).\n\n### Способы снижения coupling\n\n- Использовать интерфейсы и абстракции вместо конкретных реализаций.\n- Общаться через события (event-driven).\n- Применять Dependency Injection.\n- Определять чёткие контракты (API) между модулями.\n- В микросервисах — использовать API Gateway и асинхронное взаимодействие.\n\n> **На собеседовании:** Интервьюер хочет услышать не только определения, но и конкретные способы снижения coupling в реальном проекте. Частая ошибка — путать cohesion и coupling, или не знать типы связанности.","","junior",[15,16,17,18],"coupling","design-principles","cohesion","architecture",[],null,{"title":22,"description":23,"ogTitle":22,"ogDescription":24,"keywords":25,"schemaAnswer":33,"featuredSnippetReady":34},"Coupling и Cohesion (связанность и сцепленность) — Gymterview","Coupling — степень взаимозависимости модулей, Cohesion — степень фокусировки модуля на одной задаче. Идеал: Low Coupling + High Cohesion. Типы связанности.","Coupling — степень взаимозависимости модулей, Cohesion — степень фокусировки модуля. Идеал: Low Coupling + High Cohesion.",[26,27,28,29,30,31,32],"Coupling","Cohesion","связанность","сцепленность","Low Coupling","High Cohesion","модули","Coupling (связанность) — степень взаимозависимости между модулями; чем ниже, тем лучше, так как модули можно изменять независимо. Cohesion (сцепленность) — степень, в которой элементы внутри модуля работают над одной задачей; чем выше, тем лучше. Идеал: Low Coupling + High Cohesion. Типы связанности от худшей к лучшей: content, common, control, stamp, data, message coupling. Снижению coupling способствуют интерфейсы, события, Dependency Injection и чёткие API-контракты.",true]