Я думаю, что вы должны быть очень осторожны и внимательны к этому. Как правило, вы можете ограничить зависимости, разделяя код и используя абстрактные интерфейсы (например, указатели функций или эквивалентные объекты), но разделение обычно добавляет хрупкость. Например, вы можете вызывать модуль через общий абстрактный интерфейс, чтобы уменьшить зависимость от фактической реализации объекта, но необходимо обновить интерфейс синхронно с самим объектом, иначе код не будет работать во время выполнения.
Я бы сказал, что важно структурировать большие проекты в модули с четко определенной иерархией, но в каждом модуле не стоит переборщить с разбивкой кода для ограничения зависимостей. Если вы хотите улучшить обслуживание, вы должны сбалансировать сокращение зависимостей с уменьшением хрупкости кода.