The D in SOLID stands for dependency inversion. It’s a simple, but powerful principle that allows to change the direction of dependencies within software and often enables the generalization of a concept, by depending on abstraction.
What I like most about the principle is that it can be used to structure and guide the architecture of the modules and components of a software system on a high level, but not also that, it can also be implemented through various software design patterns on the lower level.
Classes, Modules, Components…
Relationships, and therefore dependencies exist on various levels of granularity: Classes and functions make up modules and modules form components. As we can see, the relationships of the classes also define the relationship of the higher-level constructs.