The dependency inversion principle