https://mrezkys.medium.com/dependency-inversion-principle-d-in-solid-practical-with-swift-3d5da3757172