Low Coupling / High Cohesion

High Cohesion — Высокая связность

Держи связанное вместе

Смысл

Всё, что находится внутри одного модуля, класса или функции, должно служить одной цели. Если убрать любой элемент — модуль перестаёт быть полным. Высокая связность делает код читаемым: открыл файл — сразу понял, за что он отвечает.

Индикаторы нарушения

  • Класс или модуль отвечает за несколько несвязанных вещей одновременно
  • Название модуля содержит слова «Manager», «Helper», «Utils» — и при этом он делает всё подряд
  • Изменение одной фичи требует трогать методы, которые к ней логически не относятся

Low Coupling — Низкое зацепление

Разделяй несвязанное

Смысл

Модули должны знать друг о друге как можно меньше. Зависимости — явные, минимальные, через стабильные интерфейсы. Изменение в одном модуле не должно вызывать каскадных изменений в других.

Индикаторы нарушения

  • Чтобы изменить одну вещь, приходится трогать несколько несвязанных файлов
  • Модуль напрямую создаёт зависимости внутри себя (new ConcreteService()) вместо получения их снаружи
  • Написать тест для модуля невозможно без поднятия базы данных, сети или других реальных зависимостей

Шпаргалка по LC / HC

ПринципВопрос для проверки
High CohesionВсё в этом модуле служит одной цели?
Low CouplingИзменение этого модуля не сломает другие?

Связь с другими принципами

  • DRY усиливает High Cohesion: если логика описана в одном месте, модуль отвечает ровно за одну вещь
  • KISS усиливает Low Coupling: чем проще интерфейс между модулями, тем меньше они знают друг о друге
  • YAGNI предостерегает от преждевременных абстракций — они создают иллюзию гибкости, но на деле усложняют систему
  • Эти принципы лежат в основе SOLID (особенно SRP и DIP) и микросервисной архитектуры