https://medium.com/womenintechnology/solid-coding-dependency-inversion-breaking-free-from-tight-coupling-7702edfaf7ba