Dependency Inversion Principle
In object-oriented programming, the Dependency Inversion Principle refers to a specific form of decoupling where conventional dependency relationships established from high-level, policy-setting modules to low-level, dependency modules are inverted for the purpose of rendering high-level modules independent of the low-level module implementation details.
To achieve that, you need to introduce an abstraction that decouples the high-level and low-level modules from each other. So:
- High-level modules should not depend on low-level modules. Both should depend on abstractions.
- Abstractions should not depend on details. Details should depend on abstractions.
Hence, both high-level and low-level modules depend on the abstraction. The design principle does not just change the direction of the dependency, as you might have expected from its name. It splits the dependency between the high-level and low-level modules by introducing an abstraction...