Coupling (связанность) — степень зависимости между модулями. Чем ниже, тем лучше. Высокий coupling: изменение в одном модуле ломает другой.
Cohesion (связность) — степень связи элементов внутри модуля. Чем выше, тем лучше. Высокая cohesion: всё в модуле относится к одной задаче.
Идеал: low coupling + high cohesion. В Go это достигается через маленькие интерфейсы, пакеты с чёткой ответственностью и dependency injection.
// Высокий coupling: usecase знает о конкретной БД
func (u *UseCase) Save(db *pgxpool.Pool) {}
// Низкий coupling: зависимость от абстракции
func (u *UseCase) Save(repo Repository) {}