digital-garden/dev/architecture/Связанность.md
Struchkov Mark 6d903d4988
Some checks failed
continuous-integration/drone/push Build is failing
Обновление
2024-11-24 20:43:38 +03:00

40 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
- coupling
- связанности
- связанность
tags:
- maturity/🌱
date: 2024-11-24
---
Связанность (coupling) — это мера зависимости между модулями компонента. Если модули сильно связаны, изменение одного модуля требует изменения и в других модулях, что затрудняет их поддержку и развитие. Идеальной является слабая связанность (loose coupling), когда модули минимально зависят друг от друга.
**Преимущества слабой связанности**
- **Упрощение модификации**. Система, состоящая из слабо связанных модулей, легче модифицируется, так как изменения в одном модуле минимально затрагивают другие.
- **Улучшение тестируемости**. Слабо связанные модули проще тестировать изолированно, что способствует выявлению и устранению ошибок на ранних стадиях.
**Примеры применения**
1. [[../../../../wiki/zero/00 Микросервисная архитектура|Микросервисная архитектура]]. При проектировании микросервисной архитектуры важно, чтобы каждый сервис был слабо связан с другими, что позволяет им развиваться независимо. Сервис с высокой связанностью сосредоточен на конкретной бизнес-задаче, например, управлении пользователями или платежами.
2. **Пакеты в монолитной системе**. В монолитных системах правильное разделение на пакеты может значительно снизить связанность. Например, отдельный пакет для работы с базой данных должен иметь минимальные зависимости от бизнес-логики.
3. **Классы в объектно-ориентированном программировании**. Слабая связанность между классами позволяет изменять один класс без значительного влияния на другие.
**Антипаттерны и частые ошибки**
- [[Циклические зависимости сервисов]]. Модули не должны иметь циклические зависимости, так как это сильно увеличивает связанность и затрудняет поддержку системы. Решением может быть введение интерфейсов или абстракций для разрыва циклов.
**Рекомендации**
- **Применение интерфейсов и абстракций**. Использование интерфейсов помогает уменьшить связанность, так как модули взаимодействуют через абстракции, а не напрямую.
- Регулярный [[../efficiency/Рефакторинг кода|рефакторинг]]. Постоянное улучшение кода помогает устранить чрезмерные зависимости и поддерживать слабую связанность между модулями.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]
**Родитель**::
**Источник**::
**Создана**:: [[2024-11-24]]
**Автор**::
### Дополнительные материалы
- [[Связность|Связность]]
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->