https://www.kbeanie.com/2019/04/21/solid-design-principles/
SOLID: Design principles of Object-Oriented Design