DIP provides high-level guidance to make your code loosely coupled. It says the following:
- High-level modules should not depend on low-level modules for their responsibilities. Both should depend on abstractions.
- Abstractions should not depend on details. Details should depend on abstractions.
Changes are always risky when they're made in dependent code. DIP talks about keeping a chunk of code (dependency) away from the main program to which it is not directly related.
To reduce the coupling, DIP suggests eliminating the direct dependency of low-level modules on high-level modules to perform their responsibilities. Instead, make the high-level module rely on abstraction (a contract) that forms the generic ...