MVC é o acrônimo para Model View Controller , padrão de projeto de arquitetura voltado à orientação de objetos, que tem como objetivo separar a lógica de negócios (Model) da interface de usuário (View) e do fluxo da aplicação (Controller), permitindo o desenvolvimento, teste e manutenção isolada de ambos. O MVC também permite a reutilização de uma mesma lógica de negócios através de várias interfaces sem que, para isso, seja necessário efetuar grandes alterações no código. Para que isso seja possível, o desenvolvimento de uma aplicação é feita em camadas, cada uma com funções distintas, porém fundamentais e que interagem entre si. A camada Model é responsável por grande parte do código escrito. É nesta camada que a lógica de negócios estará presente, com o objetivo de definir e gerenciar toda a informação, bem como a notificação sobre possíveis mudanças ocorridas nos dados, como por exemplo, o estado de uma caixa de texto ou a indicação de ativação de um checkbox. A camada View compreende a interface de usuário e é responsável pelo acesso aos dados contidos em Model e especifica como estes dados colhidos serão apresentados ao usuário, como, por exemplo, um texto dentro de uma textbox. Por fim, a camada Controller é responsável pelo fluxo da aplicação, ou seja, assume o mapeamento das ações efetuadas pelo usuário na camada View, por meio de eventos e, com isso, permite que a camada Model seja alterada. Esta arquitetura, representada em três camadas objetiva simplesmente separar a informação da apresentação, de modo que a manutenção seja funcional, pois o modelo mantém a persistência do negócio, uma vez que as funcionalidades da aplicação encontram-se encapsuladas. Criar uma aplicação utilizando o modelo MVC implica vantagens e desvantagens entre as quais podemos citar: VANTAGENS: 1. Fácil gerenciamento e manutenção; 2. Independência entre camadas; 3. Gerenciamento de múltiplas interfaces utilizando um mesmo modelo. DESVANTAGENS: 1. Não recomendado para aplicações de pequeno porte; 2. Exige tempo para análise e modelagem do sistema; 3. Demanda profissional com conhecimento especializado. o o o A View é muda, mas faz gestos (user gestures) para o Controller e escuta mudanças no Model; O Model é cego, mas escuta o Controller e fala para a View sobre as mudanças nele próprio; O Controller é surdo, fala para o Model quando mudar de estado e vê os gestos da View. O padrão MVC pode ser implementado em diversas plataformas, bastando apenas que você tenha o framework adequado, conforme segue abaixo: JAVA o o o o o o o o o o o Apache Struts Mentawai Tapestry VRaptor WebWork Neo Framework Play! Framework Spring MVC JSF Click Framework Brutos Alguns dos frameworks citados possuem links de acesso às páginas para download e/ou informações adicionais e tutoriais que valem uma “espiadinha”. Atualmente o mercado de trabalho em TI sofre com a baixa quantidade de profissionais especializados neste padrão de projeto. Se você se interessou pelo assunto e deseja se aprofundar, a internet disponibiliza uma infinidade de artigos e tutoriais de implementação para MVC correspondente a cada uma das plataformas de desenvolvimento. É uma boa oportunidade de se ganhar destaque e ficar à frente dos demais profissionais. COMPONENTES e FRAMEWORKS: Container IoC Spring – http://www.springsource.org/ Guice – http://picocontainer.codehaus.org/ PicoContainer – http://code.google.com/p/google-guice/ EJB – www.oracle.com/technetwork/java/javaee/ejb/index.html CDI – http://www.oracle.com/technetwork/articles/java/cdi-javaeebien-225152.html Persistência Hibernate – http://www.hibernate.org/ Spring Data – http://www.springsource.org/ iBatis – http://www.mybatis.org/ Torque – http://db.apache.org/torque/ Castor – http://www.castor.org/ JDO - interface que provê uma camada de abstração aplicação armazenamento de dados. Gerenciador de Transação Spring AOP transaction – http://www.springsource.org/ EJB (JTA) www.oracle.com/technetwork/java/javaee/ejb/index.html Framework Web Click – http://click.apache.org/ Wicket – http://wicket.apache.org/ Spring MVC – http://www.springsource.org/ Struts – http://struts.apache.org/ Mentawai – http://www.mentaframework.org/ JSF (Java Server Faces) – www.oracle.com/technetwork/java/javaee/javaserverfaces139869.html GWT – https://developers.google.com/web-toolkit/ Vaadin – https://vaadin.com/home VRaptor - http://vraptor.caelum.com.br/ Jbanana (J2EE) - framework brasileiro e open-source para desenvolvimento web. Framework Web Full Stack Grails – http://grails.org/ Ruby On Rails – http://rubyonrails.org/ OpenXava – http://www.openxava.org/ Provedores de JSF Mojorra – http://javaserverfaces.java.net/ MyFaces – http://myfaces.apache.org/ ADF – www.oracle.com/technetwork/developertools/adf/overview/index.html Componentes JSF RichFaces – http://www.jboss.org/richfaces PrimeFaces – http://primefaces.org/ OpenFaces – http://openfaces.org/ IceFaces – http://www.icesoft.org/ EasyFaces – http://www.easyfaces.com.br Extensões JSF PrettyFaces - http://ocpsoft.org/prettyfaces/ Omnifaces – https://showcase-omnifaces.rhcloud.com/ Autenticação e Autorização Spring Security – http://www.springsource.org/ JGuard – http://jguard.xwiki.com/xwiki/bin/view/Main/WebHome Soluções Web Mobile JSF RichFaces Mobile – http://www.jboss.org/richfaces JSF PrimeFaces Mobile – http://primefaces.org/ JSF OpenFaces Mobile – http://openfaces.org/ JSF IceFaces Mobile – http://www.icesoft.org/ Spring Mobile – http://www.springsource.org/ JQuery Mobile – http://jquery.com/ DOJO Mobile – http://dojotoolkit.org/ Agendamento de Tarefas Timer e TimerTask JSE http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/timer. html Quarts – http://quartz-scheduler.org/ EJB Timer Service – http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html JEE Web Container Standalone Tomcat – http://tomcat.apache.org/ Jetty – http://jetty.codehaus.org/jetty/ JBoss – http://www.jboss.org/ JEE EJB Container (Web Profile e JEE Full) Tomee – http://openejb.apache.org/apache-tomee.html Simpas – http://siwpas.mechsoft.com.tr/ Resin – http://www.caucho.com/resin-application-server/ JBoss – http://www.jboss.org/ Glassfish – http://glassfish.java.net/ Webshere – http://www142.ibm.com/software/products/br/pt/appserv-was WebLogic – http://www.oracle.com/us/products/middleware/applicationserver/weblogic-suite/index.html?ssSourceSiteId=ocombr Geronimo – http://geronimo.apache.org/ Relatórios iReport – http://jasperforge.org/projects/ireport DynamicReport – http://dynamicreports.sourceforge.net/ Birt – http://www.eclipse.org/birt/phoenix/ iText – http://itextpdf.com/ PDFBox – http://pdfbox.apache.org/ Gerador de Gráficos Charts JFreechart - http://www.jfree.org/jfreechart/ HighCharts - http://www.highcharts.com/ Web Services REST Jersey – http://jersey.java.net/ Restlet – http://www.restlet.org/ RestEasy – http://www.jboss.org/resteasy/ Web Services SOAP Metro – http://jax-ws.java.net/ Axis – http://axis.apache.org/axis/ XFire – http://xfire.codehaus.org/ JavaScript DOJO Toolkit – http://dojotoolkit.org/ JQuery – http://jquery.com/ Ext-JS – http://docs.sencha.com/ext-js/4-0/ DWR – http://directwebremoting.org/dwr/index.html Integração com Redes Sociais Spring Social – http://www.springsource.org/ Cache Space4J – http://www.space4j.org/ Memcache – http://memcached.org/ Ecache – http://ehcache.org/ Prevayler – http://prevayler.org/ JBoss Infinispan – http://www.jboss.org/infinispan.html NoSQL MongoDB – http://www.mongodb.org/ Neo4j – http://neo4j.org/ Db4o – http://www.db4o.com/ MemcachedDB – http://memcachedb.org/ CouchDB – http://couchdb.apache.org/ Project Voldemort – http://project-voldemort.com/ MarkLkogic Server – http://www.marklogic.com/ BaseX – http://basex.org/ SimpleDB – http://aws.amazon.com/simpledb/ HBase – http://hbase.apache.org/ Casandra – http://cassandra.apache.org/ Hypertable – http://hypertable.org/ OrientBD – http://www.orientechnologies.com/ SGDB Java Embutidos HyperSQL – http://hsqldb.org/ JavaDB – www.oracle.com/technetwork/java/javadb/overview/index.html Apache Derby – http://db.apache.org/derby/ H2Database – http://www.h2database.com Testes DBUnit – http://www.dbunit.org/ JUnit – http://www.junit.org/ EJBUnit – http://ejb3unit.sourceforge.net/ JSFUnit – http://www.jboss.org/jsfunit/ Loggin jse – http://docs.oracle.com/javase/7/docs/api/java/util/logging/packagesummary.html Log4J – http://logging.apache.org/index.html Testes Cargas e Perfomance JMeter – http://jmeter.apache.org/ WebLoad – http://www.webload.org/ JSON JSON – http://www.json.org/java/ XStream – http://xstream.codehaus.org/json-tutorial.html Google-JSON – http://code.google.com/p/google-gson/ Boletos Bancário Boletos Bancário – http://www.boletobancario.com.br Bopepo – www.jrimum.org/bopepo/ Stella – github.com/caelum/caelum-stella/wiki/Gerando-boleto Manipulaçao de Arquivos MS Office Apache POI – http://poi.apache.org/ JExcelApi - http://jexcelapi.sourceforge.net/ Docx4j – http://dev.plutext.org/trac/docx4j Java Docx – http://www.javadocx.com/ Aspose – http://www.aspose.com/categories/javacomponents/aspose.total-for-java/default.aspx Gerais Maven – Gerenciador de dependências – http://maven.apache.org/ E-mail – Gerenciador de emails www.oracle.com/technetwork/java/javamail/index.html JLicense – Gerenciador de licenciamento de uso de software – http://www.websina.com/products/jlicense.html UML http://www.lunatic.com.br/2012/04/uml-case-tools-modelagem-umlpara.html PLUGINS ECLIPSE http://marketplace.eclipse.org/metrics/installs/last30days http://marketplace.eclipse.org/favorites/top http://www.javacodegeeks.com/2012/05/top-10-most-popular-neweclipse-plugins.html http://www.fromdev.com/2012/01/25-best-free-eclipse-plug-ins-forjava.html http://www.eclipse.org/recommenders/