https://medium.com/clean-architecture/solids-open-closed-principle-a-simple-principle-every-developer-should-be-using-ee0bf628af70