https://pankaj-gaikar.medium.com/solidifying-your-swift-code-understanding-and-applying-the-solid-principles-c726af284136