Что верно про связность (cohesion) и связанность (coupling)?
Связность (cohesion) — насколько элементы модуля служат одной задаче: хотим высокую. Связанность (coupling) — насколько модуль завязан на устройство других: хотим низкую.
- Виды связанности от лёгкой к тяжёлой: по данным, управляющая (флаг диктует ветку), общая (разделяемое изменяемое состояние), содержательная (лезем во внутренности)
- Модуль, от которого зависят многие, должен быть стабильным и абстрактным
- Низкая связность — признак: методы класса не пересекаются по полям
А ещё Микросервисы с общей БД — сильная связанность при видимом разделении
Подробно
Связность измеряет, насколько элементы модуля служат одной задаче; связанность — насколько модуль завязан на устройство других. Градации связанности от безобидной к тяжёлой: по данным, управляющая (флаг диктует ветку), общая (разделяемое изменяемое состояние), содержательная (лезем во внутренности). Метрики Мартина: чем выше afferent coupling, тем стабильнее и абстрактнее обязан быть модуль — отсюда требование DIP держать в межслойных интерфейсах абстракции, а не детали.
Что хотят услышать
- Определения и желаемое направление.
- Виды связанности.
Частые ошибки
- Путать два понятия местами.
- Считать любую зависимость злом: цель — управлять направлением и силой связей, а не убрать их.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Связность и связанность — синонимы: оба термина описывают число зависимостей между модулями системы
- ✓Хорошее разбиение стремится к высокой связности и низкой связанности
- ✓Связанность через boolean-флаг, диктующий чужому модулю ветку выполнения, — управляющая и хуже связанности по данным
- ✓Модуль, от которого зависят многие другие, должен быть стабильным и абстрактным
Что спросят дальше
- Как shotgun surgery связан с этими метриками?
- Почему boolean-параметр в сигнатуре — запах?
Разбор темы
- DRY, KISS, YAGNI и качество связей
Дублирование знания против дублирования текста, цена преждевременной абстракции, связность и связанность, закон Деметры, каталог code smells и когда рефакторить.
Связанные вопросы
- Какой из фрагментов нарушает закон Деметры? Middle
- Два метода расчёта скидки — для розницы и для опта — сегодня содержат идентичный код, но правила задают разные владельцы и они уже расходились в прошлом. Что правильнее сделать? Middle
- Что на самом деле утверждает Single Responsibility Principle? Junior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.