Here is a great community article by Dan Klco that talks about the MVC design pattern and AEM. I really like this advice from the article:
"Project teams and CQ developers should attempt to follow MVC practices when developing on CQ5 by avoiding business logic in their JSPs, putting business logic in OSGi Services and leveraging new tools such as the upcoming Sling Proxy, to create the models."
I 100% agree - place as much as the heavy code in an OSGi servlet/service using Java. Then keep front end components light and have them call into OSGi services. The job of the the front end component should be to display the data - similar to Spring MVC that use MVC controllers, data models, and views.
To read this - see:
http://labs.sixdimensions.com/blog/2013-05-20/ask-experts-mvc-adobe-cq5/