Dependency Inversion Principle (DIP)
The Dependency Inversion Principle (DIP) is a software design guideline which boils down to two recommendations about de-coupling a class from its concrete dependencies:
‘High-level modules should not depend on low-level modules. Both should depend on abstractions.’
‘Abstractions should not depend upon details. Details should depend upon abstractions.’