Граф зависимостей
Назад к Глоссарию.
Отношения зависимостей удобно рассматривать как граф. Два самых полезных термина для разговора об этом графе — зацепленность и связность.
Зацепленность
Зацепленность описывает, насколько сильно части системы зависят друг от друга.
На эти отношения полезно смотреть как на граф: зацепленность описывает форму и плотность графа зависимостей между модулями или другими архитектурными единицами.
Сильная зацепленность облегчает распространение изменений через границы, повышает цену локальных решений и часто затрудняет переиспользование. Более слабая зацепленность уменьшает это распространение и позволяет развивать одну часть системы, не расшатывая другую.
Низкая зацепленность не означает полного отсутствия связей. Обычно цель состоит в явной и соразмерной зависимости, а не в абсолютной изоляции.
Связность
Связность описывает, насколько естественно содержимое модуля, компонента или абстракции принадлежит друг другу.
На нее тоже полезно смотреть как на граф: связность описывает внутреннюю связанность графа ответственностей внутри модуля, компонента или абстракции.
Высокая связность обычно означает, что единица имеет сфокусированную ответственность, а ее внутренние части работают на одну цель. Низкая связность обычно означает, что в одном месте оказались собраны слабо связанные ответственности — по удобству, случайности или по историческим причинам.
Связность — один из самых наглядных сигналов того, удачно ли выбрана граница.
Абстракция
Абстракция — это модель, интерфейс или структурный слой, скрывающий часть деталей ради более полезной единицы рассуждения.
Хорошие абстракции уменьшают повторяемую работу, проясняют ответственность и делают изменения более локализуемыми. Слабые абстракции делают обратное: скрывают важные различия, размывают границы и заставляют несвязанные ответственности принимать одну и ту же форму.
Практический вопрос здесь не в том, можно ли что-то абстрагировать, а в том, выражает ли абстракция действительно устойчивую общую концепцию и окупает ли свою собственную сложность.
Косвенность
Косвенность — это введение промежуточного слоя между двумя частями системы.
Она полезна тогда, когда повышает заменяемость, изолирует изменчивость или делает границу между частями системы более явной. Вредной она становится тогда, когда увеличивает число ментальных переходов без сопоставимого выигрыша в ясности или изменяемости.
Поэтому косвенность не является ни однозначным благом, ни однозначным злом. Ее ценность определяется тем, уменьшает ли она акцидентальную сложность или просто размазывает ее.