https://medium.com/@Luna-Rojas/mastering-open-closed-principle-in-javascript-build-flexible-and-maintainable-code-with-examples-25827e151867