https://medium.com/@maxheadway/solid-principles-for-typescript-a-deep-dive-into-building-robust-and-maintainable-code-29263fd1bc05