Прежде чем задать этот вопрос, я хотел бы сказать, что это вопрос в stackoverflow очень похож на мой вопрос, но все же концепция не ясна, очень запутана.
Я пытаюсь понять принцип инверсии зависимостей, но не могу понять его полностью?
Ниже приведены две точки, о которых говорит DIP.
A. Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций. Б. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Я могу понять первый пункт, но не могу понять второй, похоже, что оба они одинаковы. После долгих поисков в stackoverflow и других сайтах я могу понять, что оба пытаются сказать разные вещи, но я не смог этого понять.
Рассмотрим пример:
Рассмотрим класс SalaryCalculator [модуль высокого уровня], который используется для расчета заработной платы сотрудника. Который использует BonusCalculator [модуль высокого уровня] для расчета заработной платы, как показано ниже. Поскольку SalaryCalculator использует BonusCalculator, он нарушает первый пункт «Модули высокого уровня не должны зависеть от модулей низкого уровня». Оба должны зависеть от абстракций».
Итак, мы ввели абстракцию между ними, как показано ниже:
Здесь детали [модули низкого и высокого уровня] зависят от абстракции, а абстракция не зависит от деталей. Итак, в DIP, что пытается сказать вторая точка? Если оба одинаковы, почему это сделано как две точки?
Если кто-нибудь даст мне пример кода, это будет очень полезно.