The Dependency Inversion Principle (DIP) states that high level modules should not depend on low level modules; both should depend on abstractions.
Abstractions should not depend on details. Details should depend upon abstractions
https://medium.com/swlh/dependency-inversion-principle-5187ea8b3332