https://medium.com/@abdulrahmanAw7/title-mastering-oop-and-solid-principles-a-guide-for-scalable-software-design-82dd49d385d5