https://www.bassem-trabelsi.com/posts/solid-principles-examples-in-csharp/