Refer to dependency inversion principle