dependency inversion principle design changes