dependency inversion part 1
dependency inversion part 2