https://medium.com/@nikitinsn6/applying-solid-principles-in-c-examples-and-best-practices-7fab40b85074