Modules of higher layers shall not be dependend of modules of lower layers. Both should be related to abstract classes. Those abstract classes must not be dependend on details, instead details shall be dependend from abstractions. This is realized by utilizing the Hollywood Principle (Inversion of Control) and/or Dependency Injection.