Uma das coisa mais chatas e repetitivas que eu tenho feito ultimamente é explicar diversas vezes o que é MVC para um monte de Piá, assim depois de quase ficar louco com essa tarefa eu resolvi escrever um artigo para falar o que é MVC, receber os cmentários e críticas e depois fazer demonstração de como isso funciona sem usar nenhum framework pré existente.
A primeira coisa para entender o MVC é entender como ele nasceu… este padrão de projeto foi desenvolvido para alterar as interfaces sem mudar a operação de um sistema de desenvolvimento em Smaltalk. O desenvolvimento usando MVC, também é conhecido como desenvolvimento em camadas, apesar do absurdo que é isso, porque desenvolvimento em camadas é muito mais que MVC. Ou não!
O MVC funciona basicamente com a intereção entre as camadas, o controle aciona o modelo e a visualisação, um erro muito comum que as pessoas comentem é dizer que a visualização é que é responsável pela a interação com o cliente, o que é completamente errado. A Visualização fornece os elements gráficos necessários para que o controle forneça informações para os usuários.
Um exemplo que eu sempre uso é a comparação entre um carro e um programa feito utilizando esse padrão de Projeto.
O Modelo seria os conjutos de suspensão, motor e eixos.
O Controle, os pedais, alavancas, a direção e os comandos auxiliares (alavanca do limpador de parabisa, botões, a parte eletrônica do painel etc.)
A Visualiação é a lataria, as luzes do painel (que são acesas ou apagadas pela sua eletrônica) a pintura de símbolos obre os comandos, o acabamento sobre o volante, o diagrama de marchas sobre a alavanca de câmbio etc.
Numa visão bem simples o usuário chega acionando um controle (chamado pelo arquivo index.php), esse controle, vai acionar a visualização e perguntar qual o html que deve ser exibido quando um usuário chega, assumindo que ele não tenha uma sessão iniciada, ou um cookie de identidade, anônimo no site. A visualização devolve o html a ser exibido.
Nesta página, montada com o html devolvido pela visualização, suponhámos que haja um formulário de cadastro , que o usuário preencheu e enviou. O Controle vai receber a requisição do usuário, primeiro filtrar os dados e formatá-los de acordo com as entradas de dados do modelo, caso algum dado esteja enviado completamente incorreto, por exemplo AAAAAAAAAAA como CPF, o controle imediatamente pergunta à visualição qual a HTML e a mensagem para aquele erro e exibe-o ao usuário. Quero lembrar que Javascript pode vir já na página inicial, mas que o mesmo pode ser desligado então esse proceditmento é extremamente recomendável.
Caso nada seja detectado pelo controle, imediatamente o modelo é acionado para fazer a inserção na base de dados, caso haja um erro como uma chave duplicada, o modelo deve devolver falso para o controle, indicando um erro, o controle então requisita o erro, o transforma em uma mensagem que o usuário possa entender, algo como, “esse dado já foi inserido, por favor tente novamente ou acesse com sua conta!”. Caso tudo seja perfeito, o modelo retorna verdadeiro, o controle pergunta à visualização qual o html deve ser exibido em caso de sucesso, o recebe e o exibe.
Abaixo apresento como seria, basicamente uma anatomia para uma aplicação web usando MVC:
aplicacao ->raiz da Aplicação
|_controle -> Aqui vão as classes de controle
|_model -> Aqui vão as classes de controle
|_visualizacao -> Aqui vão as classes da visualização
|_bibliotecas -> Applicações diversas (smarty,fpdf etc.)
|_config -> arquivos de configurações
|_ public -> Webroot da ap. , aqui ficam os arquivos que o browser chama
|_js-> arquivos javascript
|_imagens -> arquivos de Images
|_css-> arquivos de folhas de estilos
A separação por diretórios nos permite organizar as idéias saber aonde localizar cada um dos arquivos desejados.
Espero que esse artigo tenha deixado mais fácil a visualização de o que é MVC e como organizar as idéias para começar a enxergar esse padrão de projeto.
No próximo artigo estarmos mostrando um modelo bem básico de um controle.
Related posts:
Se o sistema não tiver banco de dados não há modelo?
Banco de dados não é necessariamente, MySQL, POstgreSQL etc. pode ser um arquivo texto, webservice, xml etc. O Modelo lida com a lógica de negócios de uma maneira geral
suponho que onde lê-se:
|_model -> Aqui vão as classes de controle
deveria ser:
|_model -> Aqui vão as classes do modelo
[]‘s
Eduardo, perfeito to fazendo a correção