Dependency inversion principle
A. High-level modules should not depend on low-level modules. Both should depend on abstractions.
B. Abstractions should not depend on details. Details should depend on abstractions.
Whatever level you are (high/low), you should have abstractions and have interfaces, so that to interact with different modules.
