26 апреля 2024 г. (изменено: 26 апреля 2024 г.)

Канал: @cherkashindev

1 444

📖 Cohesion и Coupling: отличия

Сегодня посоветую короткую статью, чтобы наконец-то разобраться что есть что.

🛑 Основные моменты

  • Нужно стремиться к достижению low coupling (низкой связанности) и high cohesion (высокого сцепления)
  • Cohesion — степень, в которой часть кодовой базы образует логически единую атомарную единицу — блок.
  • Coupling — степень взаимосвязи между этими блоками.
  • Блок здесь необязательно является классом. Это может быть метод, класс, группа классов или даже модуль: понятия cohesion и coupling применимы на разных уровнях.
  • Высокий cohesion означает хранение связанных друг с другом частей кода в одном месте.
    • Например, мы храним код работы с пользователями в одном месте, и это может быть как стандартный MVC контроллер, так и отдельный микросервис.
  • В то же время низкий coupling заключается в максимально возможном разделении несвязанных частей кодовой базы.
    • Например, react и react-dom хранятся в разных пакетах, благодаря чему мы можем использовать react-native вместо react-dom и писать нативные приложения.
  • В отличие от такого показателя, как цикломатическая сложность, степень cohesion  и coupling не может быть измерена напрямую.

ℹ️ Понятие cohesion похоже на Принцип единственной ответственности, который утверждает, что у класса должна быть одна ответственность, что аналогично тому, что делает код с высоким cohesion. Разница здесь в том, что высокий cohesion необязательно означает, что код должен иметь только одну ответственность. Можно сказать, что Принцип единственной ответственности в этом смысле более строгий.

👍 9 4 🔥 3