Прочитал статью и не понял смысл, после прочтения "Чистая архитектура" все понятно, а тут явно создаётся ощущение что автор немного перепутал. В книге Мартина часто приводиться аналогия с луковицей, и основной посыл, что уровень который расположен ближе к центру ничего не должен знать о уровне который расположен ближе к краю. Но в разработке часто бизнеса логика (уровни ближе к центру) должны взаимодействовать с выше стоящими уровнями. Допустим какая либо библиотека анализирует сигнал с датчика и при определенном событии должна оповестить об этом программу вызвавшию ее. Библиотека это бизнеса логика и она не должна знать ничего о вызвавшем его коде, для этого и используется инверсия зависимости. В библиотеке есть вызов метода интересного класса ( например класса "Инициатор") в котором есть метод "Получить". Когда мы хотим использовать эту библиотеку мы в контракте (в хэдере) видим что класс вызывающий ее должен быть наследован от абстрактного класса "Инициатор" и надо реализовать следующим образом метод "Получить". После всех проделок мы в вызывающем классе (верхнеуровневый код) при создании экземпляра класса бизнеса логики передаём в нее указатель на наш вызывающий класс как указатель на "Инициатор" и запускаем нужный метод.
Конечно пример притянут и проще использовать возврат из функции, но хотел донести суть - что в системе MVC (model, view, controller) уровень бизнеса логики (model) ничего не должен знать о вызывающем его коде. А то что описано в статье про верхнеуровневый и низкоуровневые модули это или путаница местами или ошибка.
Прочитал статью и не понял смысл, после прочтения "Чистая архитектура" все понятно, а тут явно создаётся ощущение что автор немного перепутал. В книге Мартина часто приводиться аналогия с луковицей, и основной посыл, что уровень который расположен ближе к центру ничего не должен знать о уровне который расположен ближе к краю. Но в разработке часто бизнеса логика (уровни ближе к центру) должны взаимодействовать с выше стоящими уровнями. Допустим какая либо библиотека анализирует сигнал с датчика и при определенном событии должна оповестить об этом программу вызвавшию ее. Библиотека это бизнеса логика и она не должна знать ничего о вызвавшем его коде, для этого и используется инверсия зависимости. В библиотеке есть вызов метода интересного класса ( например класса "Инициатор") в котором есть метод "Получить". Когда мы хотим использовать эту библиотеку мы в контракте (в хэдере) видим что класс вызывающий ее должен быть наследован от абстрактного класса "Инициатор" и надо реализовать следующим образом метод "Получить". После всех проделок мы в вызывающем классе (верхнеуровневый код) при создании экземпляра класса бизнеса логики передаём в нее указатель на наш вызывающий класс как указатель на "Инициатор" и запускаем нужный метод.
Конечно пример притянут и проще использовать возврат из функции, но хотел донести суть - что в системе MVC (model, view, controller) уровень бизнеса логики (model) ничего не должен знать о вызывающем его коде. А то что описано в статье про верхнеуровневый и низкоуровневые модули это или путаница местами или ошибка.