https://medium.com/better-programming/laravel-oop-principles-for-writing-better-code-explained-part-1-531276365cba