В чем разница между Cohesion и Coupling?
Продвинутые темы
Cohesion (связность) и Coupling (связанность) — две метрики качества дизайна: cohesion — насколько связаны обязанности внутри модуля (нужна высокая), coupling — насколько модули зависят друг от друга (нужна низкая).
Cohesion (связность) — внутри модуля
Насколько логически связаны элементы одного модуля/класса. Хорошо — высокая связность: модуль делает одну чётко определённую вещь.
// Высокая связность — всё про пользователя
class UserService {
getUser() {}
updateUser() {}
deleteUser() {}
}Низкая связность — модуль делает несвязанные вещи (и юзеры, и логи, и почта) — плохо.
Coupling (связанность) — между модулями
Насколько модули зависят друг от друга. Хорошо — низкая связанность: модули независимы, изменение одного мало влияет на другие.
// Низкая связанность — зависимость от абстракции
class OrderService {
constructor(paymentGateway) {} // не завязан на конкретную реализацию
}Цель
Высокая связность + низкая связанность — признак хорошего дизайна:
- Модули сфокусированы (высокий cohesion).
- Модули независимы (низкий coupling).
Как достигать
- Разделение ответственностей (SRP).
- Зависимость от абстракций (DI, интерфейсы).
- Инкапсуляция.
Коротко для собеседования
Cohesion — связность внутри модуля (насколько связаны его обязанности, нужна высокая); Coupling — связанность между модулями (насколько они зависят друг от друга, нужна низкая). Цель хорошего дизайна — высокая связность + низкая связанность: сфокусированные независимые модули.