Dependency Inversion Principle (DIP)
The Dependency Inversion Principle states that high-level modules should not depend on low-level modules. Both should depend on abstractions. Additionally, abstractions should not depend on details. Details should depend on abstractions.
High-level modules should not depend on low-level modules. Both should depend on abstractions (interfaces or abstract classes).
Abstractions should not depend on details. Details (concrete implementations) should depend on abstractions.
Benefits:
- Promotes loosely coupled systems: High-level modules are not directly dependent on low-level modules.
- Enhances code flexibility and maintainability: Changes in low-level modules do not affect high-level modules.
- Facilitates easier testing: Dependencies can be replaced with mock objects for unit testing.