Introduced by Robert C. Martin in The Dependency Inversion Principle (web.archive.org)
- High-level modules should not depend on low-level modules. Both should depend on abstractions.
- Abstractions should not depend on details. Instead, details should depend on abstractions