The framework subtly encourages you to write better designed code: by using dependency injection, and splitting up your application design into domain (model) objects, controllers, service classes, DAOs, etc.
As a side effect of the first bullet point, your code ends up being extremely and easily unit-testable.