https://medium.com/@juanceron256/the-solid-principles-in-java-best-practices-for-writing-clean-and-maintainable-code-76abf7816874