a code base to explain dependency inversion principle