PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

В чем разница между Cohesion и Coupling?

Продвинутые темы

Cohesion (связность) и Coupling (связанность) — две метрики качества дизайна: cohesion — насколько связаны обязанности внутри модуля (нужна высокая), coupling — насколько модули зависят друг от друга (нужна низкая).

Cohesion (связность) — внутри модуля

Насколько логически связаны элементы одного модуля/класса. Хорошо — высокая связность: модуль делает одну чётко определённую вещь.

// Высокая связность — всё про пользователя
class UserService {
  getUser() {}
  updateUser() {}
  deleteUser() {}
}

Низкая связность — модуль делает несвязанные вещи (и юзеры, и логи, и почта) — плохо.

Coupling (связанность) — между модулями

Насколько модули зависят друг от друга. Хорошо — низкая связанность: модули независимы, изменение одного мало влияет на другие.

// Низкая связанность — зависимость от абстракции
class OrderService {
  constructor(paymentGateway) {} // не завязан на конкретную реализацию
}

Цель

Высокая связность + низкая связанность — признак хорошего дизайна:

  • Модули сфокусированы (высокий cohesion).
  • Модули независимы (низкий coupling).

Как достигать

  • Разделение ответственностей (SRP).
  • Зависимость от абстракций (DI, интерфейсы).
  • Инкапсуляция.

Коротко для собеседования

Cohesion — связность внутри модуля (насколько связаны его обязанности, нужна высокая); Coupling — связанность между модулями (насколько они зависят друг от друга, нужна низкая). Цель хорошего дизайна — высокая связность + низкая связанность: сфокусированные независимые модули.

Другие вопросы раздела