first steps to a better design
make it easier to add new models
now it's really easy to extend
move code for better maintenability
new code for template as well
no need for that method to be public
fixed all errors
the same behavior for error messages
Merge branch 'feature/refactor_models' into development