https://medium.com/@candveloper/solid-principles-for-better-code-quality-and-development-efficiency-c2393a76e94e