The Dependency Inversion Principle
The last SOLID principle concerns the dependence among the components of an application and states that:
1. High-level modules should not depend on low-level modules. Both should depend on abstractions.
2. Abstractions should not depend upon details. Details should depend on abstractions.
This is the Dependency Inversion Principle, and it consists of two recommendations. The first one concerns the classic layered architecture of an application, where in general the components of the high level are strictly dependent on the components at the low level. A possible modification to a low-level component may require a change to one or more high-level components. The first recommendation suggests to reverse this dependency, changing it toward an intermediate abstraction, such as an interface. So, a low-level component must implement an interface used by the components of the higher level.
The second recommendation says to make sure that the implementation details...