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.

[ Hits: 5.763 ]

Por: Anderson Irias Hermogenes em 06/10/2016


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.

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&aacute;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&aacute;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.

   

Páginas do artigo
   1. MVC - Camadas
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

PHP5 - Criando e utilizando uma classe básica

PHP e suas variáveis (básico)

Introdução a Orientação a Objetos no PHP4

Tratamento de exceções do PHP: uma introdução para iniciantes

Verdades e mentiras sobre tecnologias WEB

  
Comentários
[1] Comentário enviado por Buckminster em 06/10/2016 - 23:55h

Muito bom.
Claro, conciso e preciso.

[2] Comentário enviado por Felipeludo2011 em 09/10/2016 - 19:52h

Excelente artigo, este é um modelo bastante utilizado.

[3] Comentário enviado por Ragen em 11/10/2016 - 16:54h

Nobre amigo, permita fazer uma crítica construtiva ao artigo - geralmente, quem começa em PHP acredita que o mais certo é copiar a estrutura OO de JAVA, colocando sua View server side e dentro de uma classe PHP você une o pior de 2 mundos - não usa o PHP como API, afinal ele compila HTML e não pode trafegar plenamente um elemento DOM, além disso não faz uso do benefício do localStorage do HTML5. Quanto ao conceito e didática, o artigo é nota 10.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts