Dependency Inversion Principle - DIP

Avoid making classes depending on concrete class to reduce coupling. Reduce the maintenance effort and risk of your system.

The Dependency Inversion principle says that classes should relay on generalizations rather than implementation details.

To accomplish this always develop oriented to interfaces, not implementation. Extract the behavior representation of classes to interfaces and abstract classes, so they can easily be replaced.