https://yunielacosta.com/posts/en/d-the-dependency-inversion-principle/