A SOLID design principle that states:

  • High level (important) modules should not depend on low-level (no important) modules. Both should depend on abstractions
  • Abstractions should not depend on details. Details should depend on abstractions This means that modules with high-level business rules should take precedence over modules that contain implementation details.

Examples