Depend on abstractions, not on concretions.
Что такое модули верхних уровней? Как определить этот уровень? Как оказалось, все очень просто. Чем ближе модуль к вводу/выводу, тем ниже уровень модуля. Т.е. модули, работающие с BD, интерфейсом пользователя, низкого уровня. А модули, реализующие бизнес-логику — высокого уровня.
Что такое зависимость модулей? Это ссылка на модуль в исходном коде, т.е. import, require и т.п. С помощью динамического полиморфизма в runtime можно обратить эту зависимость.
Представьте себя воспарившим духом над своим телом на операционном столе. Вы видите как хирург работает над вашим сердцем. У хирурга понятное дело что "сроки горят" и он должен быть как можно скорым. Но скажите теперь - как вы хотели бы что бы хирург, доделывал свою работу?
Вот вот. Мало кто хочет чтоб в его груди лежало "кое как, собранное в кучу" и так же подшитое сердце. То же самое с кодом вашего проекта. Сроки поджимают, да, нужно смириться с этим. Но бросать шлепки говна в документы - не лучший вариант.
Мне просто нравиться как дядя Боб чётко показывает нужду в хорошем коде. Отличное сравнение с раотой хирурга.