https://medium.com/@jordan.l.edmunds/writing-future-proof-code-with-dependency-injection-529e13f2ce26