https://medium.com/@cyberdrudge/solid-design-principles-everything-you-need-to-know-with-examples-fe39cef1f6a0