"В МВУ нет ни одной строчки кода из МНУ" - это достигается за счёт передачи в качестве зависимости (например через аргумент функции, аргумент в конструкторе) интерфейса, вместо непосредственно самого МНУ, поэтому в МВУ не будет строчек кода МНУ, а будет вызов метода интерфейса МВУ, т.е. строчек кода МВУ.
МНУ не используется интерфейс из МВУ, а реализует его, то есть зависит от абстракции - интерфейс. Модули не поменялись местами, а просто зависимость поменяла направление: МВУ перестал зависит от конкретной реализации МНУ, а наоборот диктует через интерфейс МНУ как ему себя надо вести. Но при этом МВУ использует МНУ, поэтому находиться на верхнем уровне
"В МВУ нет ни одной строчки кода из МНУ" - это достигается за счёт передачи в качестве зависимости (например через аргумент функции, аргумент в конструкторе) интерфейса, вместо непосредственно самого МНУ, поэтому в МВУ не будет строчек кода МНУ, а будет вызов метода интерфейса МВУ, т.е. строчек кода МВУ.
МНУ не используется интерфейс из МВУ, а реализует его, то есть зависит от абстракции - интерфейс. Модули не поменялись местами, а просто зависимость поменяла направление: МВУ перестал зависит от конкретной реализации МНУ, а наоборот диктует через интерфейс МНУ как ему себя надо вести. Но при этом МВУ использует МНУ, поэтому находиться на верхнем уровне