MVC (Model – View – Controller)
30 de março de 2009, em Passos Iniciais, por Tárcio Zemel

O MVC (Model – View – Controller) já foi citado no artigo sobre padrões de projeto e no artigo introdutório sobre CodeIgniter; foi citado que o MVC é um dos padrões que o CodeIgniter implementa em seu core. Também foi dito que não é preciso saber tanto sobre o que ou como o CodeIgniter implementa os padrões de projeto. Bem, esta é a regra geral. O MVC é uma exceção a isso! É muito importante saber o que é e como funciona o padrão MVC no CodeIgniter a fim de saber como tirar o melhor proveito do framework!
Na verdade, saber sobre o conceito e como funciona o MVC é imprescindível para que você possa mexer, o mínimo que seja, com o CodeIgniter, já que todo o funcionando do framework se dá a partir da lógica e estrutura do MVC.
Por que “MVC”?
Atualmente muitos – muitos, mesmo – softwares utilizam o padrão MVC como base de funcionamento e, no caso, não é à toa, pois a abordagem é realmente muito boa e a lógica por trás faz “valer a pena” adotar o MVC.
O MVC pode ser entendido como uma divisão de tarefas em um aplicativo. Cada um dos 3 – Model, View e Controller – tem sua função bem definida (na teoria) e executa exatamente o que deve; nada além, nada aquém.
Com o desenvolvimento e evolução dos programas e, consequentemente, da forma de se fazer os programas, novas abordagens tiveram que ser pensadas para facilitar a programação e garantir que os softwares, depois de prontos, fossem mais facilmente manuteníveis. A partir disso surgiu o conceito de dividir tarefas, de garantir com que cada “camada” da aplicação tenha seu próprio escopo e definição e que a comunicação entre todas elas se dê de maneira eficiente e controlada.
Façamos uma analogia interessante envolvendo o HTML e o advento do CSS. “Antigamente”, a parte “estética” dos sites era controlada diretamente via tags HTML; se se queria um título na cor vermelho, colocava-se a tag para cores em vermelho; se se quisesse a fonte de tamanho “x”, colocava-se a tag para o texto ficar deste tamanho; e assim por diante. O problema era quando havia um site com 20 páginas ou mais e era preciso alterar o tamanho e a cor de todos os títulos…
Pensando nisso, Håkon Wium Lie teve a brilhante ideia de criar as folhas de estilo em cascata, tão conhecidas hoje em dia como “CSS”. Com CSS, a “aparência” do site, apesar de ser intrinsecamente relacionada com seu conteúdo, pode (e deve) ser controlada de forma independente, em arquivos separados, de forma a garantir a manutenção de um sem intervir no campo de atuação do outro.
E, mais ou menos da mesma maneira, se dá com o padrão MVC: existem funções/objetivos/escopos diferentes para o Model, para o View e para o Controller e cada um destes pode ser alterado, separadamente, por pessoas diferentes, sem interferir/intervir na “área de atuação” do outro! É algo fantástico!
Entendendo o Model, o View e o Controller
Na maioria das fontes que você pesquisar sobre MVC, geralmente vai encontrar primeiramente a explicação de “View” – provavelmente por ser a mais fácil de entender e/ou para não “assustar” muito no primeiro contato com o padrão de projeto. Mas, para seguir corretamente o acrônimo, serão apresentados, respectivamente, o Model (“Modelo”), o View (“Visualização”) e o Controller (“Controle”).
- Model. Tenha uma coisa em mente: quando pensar em Model, pense em estruturas de dados! Num software baseado em MVC, é o Model que tem o contato com as informações armazenadas e que são mostradas, estejam elas em um banco de dados, arquivo XML, ou onde quer que estejam. É no Model e somente no Model que as operações de CRUD devem acontecer.
- View. É a apresentação, é o que aparece, é o que é visualizado por quem usa o sistema. É no View que as informações, sejam elas quais forem e de de qual lugar tenha vindo, serão exibidas para a pessoa – logicamente acompanhadas de um bom design, uma boa estrutura organizacional, um ambiente agradável para quem está vendo, e muitos outros.
- Controller. Como sugere o nome, é responsável por controlar todo o fluxo do programa. É o “cérebro” e o “coração” do aplicativo; é no Controller que se decide “se”, “o que”, “quando”, “onde” e tudo o mais que faz com que a lógica funcione. Desde o que deve ser consultado no banco de dados à tela que vai ser exibida para quem usa o programa/sistema, é no Controller que tudo isso deve ser definido.
Certamente com estas breves descrições não é possível ter um entendimento satisfatório sobre o MVC. Então, leia a definição de MVC da Wikipédia, uma explicação sobre MVC de José Carlos Macoratti e uma explicação de MVC de Maikon Portela. Com essas leituras você certamente vai entender melhor sobre a o padrão MVC. Para facilitar ainda mais, veja esta representação esquemática do modelo MVC (com o perdão da “tradução mais ou menos” que fiz a partir da imagem do Streek):

Como dito, o CodeIgniter utiliza fortemente o padrão MVC para seu funcionamento e o MVC é parte importantíssima de seu “fluxo” de funcionamento; e existem muitos outros, como Bibliotecas (libraries), “Ajudantes” (helpers), Extensões (plugins) e outros. Mas isso é assunto para outro artigo! ;-)
Fiquem ligados no CodeIgniter Brasil!
9 comentários em "MVC (Model – View – Controller)"
Tárcio Zemel em 2 de abril de 2009
@ Matheus
Que bom que os textos estão sendo úteis, Matheus! Obrigado pela força!
Quanto a essa história dos Models, pessoalmente acredito ser conveniente respeitar o MVC independentemente do tamanho do projeto. Basta pensar que algo pequeno pode crescer muito rapidamente (principalmente em se tratando de projetos online), e ter um retrabalho desnecessário para acertar os Models seria frustrante e anti-produtivo.
“MVC2″?! Também não tinha ouvido falar! Vou pesquisar! Obrigado pela dica e por comentar!
Nei em 14 de dezembro de 2009
Só uma coisa, lendo os diversos artigos, tô tendo dificuldade com algumas imagens, mesmo usando o recurso do browser para aumentar a imagem (ctrl+), algumas ficam difíceis de ler ou entender.
fica aí a dica para linkar a imagem para o tamanho original com algum plugin do WP.
Tô entendendo melhor hein… indo pro próximo artigo…
Marcelo Diniz em 29 de janeiro de 2010
Tárcio, parabéns pelo que vi que vc vem fazendo por quem está querendo aprender, pois boas informações não são encontradas em todos os lugares, e aqui é um onde eu vi algumas informações boas, pelo menos por enquanto. :P
Hj já li alguns posts e vou continuar lendo sempre que der, enquanto eu não ler TODOS os seus posts na parte de passos-inicias não paro, claro, não é leitura para 1 dia, pelo menos para mim, mas vamos a luta, pois quanto antes eu ler, antes aprendo…….
[]’s
Tárcio Zemel em 1 de fevereiro de 2010
@ Nei
Algumas realmente não tem ampliaçã, mas, as que tem, já podem ser vistas em tamanho maior pelo plugin de lightbox que foi instalado. Obrigado pelo alerta! Att
@ Marcelo Diniz
Isso, Marcelo, vamos continuar estudando o CodeIgniter para facilitar nossas vidas de programadores! Assine o feed do CodeIgniter Brasil para não peder as novidades!
- websapiens.net em 30 de março de 2009
- 10 razões de porque CodeIgniter arrasa | CodeIgniter Brasil em 27 de abril de 2009
- CodeIgniter: framework PHP ágil, robusto e de alta performance | CodeIgniter Brasil em 15 de maio de 2009
- Fluxograma de Dados do CodeIgniter: como tudo funciona | CodeIgniter Brasil em 10 de julho de 2009

Matheus em 1 de abril de 2009
Show de bola o texto! Um dos passos mais importantes é justamente este: abstrair a idéia de MVC para que se possa aplicá-lo em sua correta forma potencializando seu projeto.
Há casos em que algumas pessoas falam que não precisam utilizar Models, pois o projeto/aplicação é pequeno e/ou não necessita de um tratamento de dados abrangente e por isso “enchem” os controllers…. até que ponto isso é legal?
Ontem ouvi pela primeira vez o termo MVC2, estou lendo um pouco a respeito.
Abraços!