MVC - Conceito e exemplo em PHP
Neste artigo faço uma pequena descrição sobre o padrão de arquitetura de software MVC. Nele descrevo brevemente o funcionamento das camadas MVC, exemplifico o funcionamento básico com PHP e cito algumas vantagens de se utilizar este padrão.
MVC - Camadas
Model-view-controller (MVC) é um padrão de arquitetura de software que divide a aplicação em três camadas: Model, View e Controller.
Regras de negócios são as definições, de como a empresa em questão faz negócios. É a declaração de como a empresa trabalha, todos os processos para execução do serviço, ou entrega do produto com que a empresa trabalha.
Os dados podem ser entregues em vários formatos, dependendo do que for preciso, como páginas HTML, arquivos XML, documentos, vídeos, fotos, músicas etc.
Segue um exemplo simples e básico que utiliza do conceito MVC em PHP:
1. View - um usuário chega na tela de login do site. A tela e apresentada pela View, com um formulário de login. A camada View encaminha ao controller os dados de login.
2. Controller - o controller recebe os dados da requisição feita pelo usuário e os encaminha para a Model correta validar o Login.
3. Model - a Model valida os dados e retorna a resposta de login.
4. Controller - o Controller pega a validação feita pela Model e a encaminha à view correta, para que eles sejam exibidos ao usuário.
5. View - a view exibe a mensagem resultado ao usuário.
Segue o exemplo descrito acima em código.
Estrutura de arquivos:
Arquivo: index.php
Arquivo: View.php
Arquivo: Controller.php
Arquivo: Model.php
M (Model)
A camada Model (modelo) é responsável pela leitura, escrita e validação dos dados. Nesta camada são implementadas as regras de negócio.Regras de negócios são as definições, de como a empresa em questão faz negócios. É a declaração de como a empresa trabalha, todos os processos para execução do serviço, ou entrega do produto com que a empresa trabalha.
V (View)
A camada View (visão) é responsável pela interação com o usuário. Nesta camada são apresentados os dados ao usuário.Os dados podem ser entregues em vários formatos, dependendo do que for preciso, como páginas HTML, arquivos XML, documentos, vídeos, fotos, músicas etc.
C (controller)
A camada Controller (controlador) é responsável por lidar com as requisições do usuário. Ela gerência as ações realizadas, fala qual Model e qual View utilizar para que a ação seja completada.MVC - Exemplo do funcionamento básico PHP
O padrão MVC é simples na utilização, mas sua implementação no código pode ser um tanto complexa. Em PHP existem diversos frameworks que já utilizam o padrão MVC e realizam sua implementação de forma profissional e otimizada.Segue um exemplo simples e básico que utiliza do conceito MVC em PHP:
1. View - um usuário chega na tela de login do site. A tela e apresentada pela View, com um formulário de login. A camada View encaminha ao controller os dados de login.
2. Controller - o controller recebe os dados da requisição feita pelo usuário e os encaminha para a Model correta validar o Login.
3. Model - a Model valida os dados e retorna a resposta de login.
4. Controller - o Controller pega a validação feita pela Model e a encaminha à view correta, para que eles sejam exibidos ao usuário.
5. View - a view exibe a mensagem resultado ao usuário.
Segue o exemplo descrito acima em código.
Estrutura de arquivos:
- /mvcexemplo/ - index.php
- /mvcexemplo/Model/ - Model.php
- /mvcexemplo/View/ - View.php
- /mvcexemplo/Controller/ - Controller.php
Arquivo: index.php
<?php
/* Realiza a inclusão dos arquivos com os códigos Model, View, Controller*/
include '/mvcexemplo/Controller/Controller.php';
include '/mvcexemplo/View/View.php';
include '/mvcexemplo/Model/Model.php';
/* Pega a ação passada pela URL*/
$acao = $_GET['acao'];
/* Valida a ação passada, verifica se ela existe e se ela e o login
* Se a ação for exisir e for login inicia a função login do Controller
* Se não inicia a função login da View*/
if(isset($acao) && $acao == 'login'){
$controller = new Controller();
$controller->login();
}else{
$view = new View();
$view->login();
}
?>
Arquivo: View.php
<?php
class View {
public function login($validacao) {
if(!isset($validacao)){
/* Exibe o formulário de login, onde será realizada a requisição pelo usuário */
echo '
<div>
<h3>Login</h3>
<form action="index.php?acao=login" method ="post">
Usuário:
<input type="text" name="usuario"></br></br>
Senha:
<input type="password" name="senha"></br></br>
<input class="botao" type="reset" value="Limpar">
<input class="botao" type="submit" name="submit" value="Logar">
</form>
</div>';
}else{
/* Exibe o resultado da validação do login feita pela Model */
echo '<h3>'.$validacao.'</h3>';
}
}
}
?>
Arquivo: Controller.php
<?php
include '/../Model/Model.php';
class Controller {
public function login() {
/* Pega o usuário e senha preenchidos no formulário de login da View */
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
/* Encaminha os dados a Model para que seja realizado a validação */
$model = new Model();
$validacao = $model->validaDados($usuario,$senha);
/* Pega o resultado da validação realizada no Model e o encaminha para ser exibido pela View */
$view = new View();
$view->login($validacao);
}
}
?>
Arquivo: Model.php
<?php
class Model {
public function validaDados($usuario,$senha) {
/* Aplica a validação ao usuário e senha passados, utilizando as regras de négocio especificas para ele. */
if(strlen($usuario)<5){
return 'Digite o usuário corretamente';
}else if(strlen($senha)<8){
return 'A senha deve possuir mais de 8 caracteres';
}else{
return 'Login efetuado com sucesso';
}
}
}
?>
MVC - Vantagens no desenvolvimento
O padrão de desenvolvimento de software MVC (Model view controller) traz consigo grandes vantagens para o desenvolvimento de aplicações. Vantagens como:- Reusabilidade de código; uma funcionalidade já implementada em uma parte do sistema, pode ser novamente utilizada em outra parte, sem ser necessário o seu re-desenvolvimento.
Exemplo: em um sistema toda vez que um usuário altera sua senha, ele recebe um e-mail informando a alteração. Neste mesmo sistema quando ocorre uma venda, também é enviado um e-mail informando este usuário. Os e-mails enviados possuem assunto e conteúdo diferentes, mas ambos utilizam a funcionalidade de envio de e-mail. Sendo assim não é necessário realizar o desenvolvimento de um novo código de envio de e-mails, basta somente utilizar a funcionalidade existente, modificando os dados a serem enviados. - Desenvolvimento rápido; neste modelo é possível que desenvolvedores e designers trabalhem simultaneamente na aplicação. Cada um trabalharia em uma camada diferente da aplicação, tornando o desenvolvimento produtivo.
- Fácil manutenção; como o código é dividido em partes distintas, se torna fácil adicionar novas funcionalidades e alterar características antigas. O código também fica mais fácil de ser compreendido por outros desenvolvedores. Exemplo: um sistema de uma transportadora foi feito por um desenvolvedor que não presta mais serviços para mesma. No futuro esta transportadora precisa realizar uma modificação em uma parte específica do sistema, é contratado outro desenvolvedor para a tarefa. Quando o responsável pela rotina na transportadora informar o mesmo ao desenvolvedor, ele conseguirá facilmente identificar o reportado no código do sistema.
Claro, conciso e preciso.