Arquitetura MVC em PHP

Olá Pessoal,

Bem, hoje neste primeiro artigo falaremos sobre um assunto que ainda falta na maioria dos programadores PHP, eu mesmo já passei pela situação, não por querer, mas acredito que por falta de informação e por falta de procura por parte de nós.

Uma coisa que percebo em muitos programadores PHP é a falta de preocupação quanto a questões de padrões e organização de código, esses quesitos são essencias para uma aplicação sólida e com grande escalabilidade (facilidade de expansão). Acredito que isso se deve ao fato de o PHP ser uma linguagem muito “livre” que permite que os programadores não se preocupem com questões que um programador Java já tem no sangue, por exemplo.

Enfim, sem mais ladainhas, falaremos hoje sobre a arquitetura MVC. Este artigo terá uma visão mais conceitual do que prática, contudo tentarei exemplificar os fatos com alguns códigos e algumas indicações. Gostaria de acrescentar que se faz por necessário um conhecimento, mesmo que básico, de OO.

O conceito MVC (Model View Controller) na tradução é: Modelo, Visão e Controle.

Alguns devem estar se perguntando: Mas que diabos é Modelo, Visão e Controle?

Vamos lá…

Visão: É a camada de visualização da sua aplicação, onde ela apenas apresenta o que foi obtido através do controle. Eu diria que seria que é o que chega ao usuário final, a parte visual, de interface. A visão não deve ter nenhuma lógica de código, apenas a exibição dos dados.

Controle: É onde serão processadas todas as requisições feitas através da interface (Visão). O controle também acessa o Modelo afim de obter determinadas informações. Toda lógica da aplicação (validações, atribuições, etc) é feita no Controle. Eu diria que o controlle é o gerenciador da sua aplicação.

Modelo: É o modelo da sua aplicação, onde são definidos propriedades e atributos dos seus personagens. Na maioria dos casos existe ainda uma camada de persistência dos dados (DAO usa isso, falaremos sobre DAO nos próximos artigos), mas excepcionalmente neste artigo a nossa persistência será feita no Modelo.

Após explicado quem é quem nesse tal de MVC, vamos através de exemplos práticos ilustrar algumas situações.

Imagem o seguinte cenário: Uma aplicação que deva fazer a inserção, edição, remoção e listagem de usuários.

Algo bem simples, mas que servirã para exemplificar como poderíamos usar o MVC.

Então vamos a a nossa camada de visualização (View) para listagem de usuários:

View.php

<?php require_once("Controller.php"); ?>

<?php $c = new Controller();   ?><h3>Listagem de Usuários</h3>

<br><br>

<table cellspacing="0" cellpadding="0" border="0">

    <tr>

      <td width="100">ID</td>

      <td width="200">Nome</td>

      <td width="200">sobrenome</td>

      <td width="200">Email</td>

    </tr>

<?php

for ($i = 0; $i < count($c->users); $i++) {

?>

<tr>

      <td width="100"><?php echo $c->users[$i]->id;?></td>

      <td width="200"><?php echo $c->users[$i]->name;?></td>

      <td width="200"><?php echo $c->users[$i]->lastname;?></td>

      <td width="200"><?php echo $c->users[$i]->email;?></td>

</tr>

<?php

}

?>

</table>

Agora vamos para a nossa classe de controle. A mesma tera apenas o trabalho de carregar os usuários para a nossa classe de visualização através do nosso modelo de usuários.

Controller.php

<?php

require_once("UsersModel.php");

require_once("ConnectDB.php");Class Controller

{

 var $users;

function Controller ($action = null) {

 	if (empty($action)) {

    		$this->users = new Users();

 		$this->users = $this->users->loadAll();

    		}

   		}

}

?>

Agora vamos a nossa classe Modelo, teremos um modelo de usuários (personagem em questão). Poderíamos ter um modelo de carros, aviões, animais, etc.

UsersModel.php

<?php

Class Users {

  var $id;

  var $name;

  var $lastname;

  var $email;function getId () {

    return $this->id;

  }

function setId ($id) {

    $this->id = $id;

  }

function getName () {

    return $this->name;

  }

function setName ($name) {

    $this->name = $name;

  }

function getLastname () {

    return $this->lastname;

  }

function setLastname ($lastname) {

    $this->lastname = $lastname;

  }

function getEmail () {

    return $this->email;

  }

function setEmail ($email) {

    $this->email = $email;

  }

function loadAll () {

   $query = "SELECT *

 	  	      FROM users

 	 	        ORDER BY name ASC";

   $result = pg_query($query);

while ($array = pg_fetch_array($result)) {

 		$user = new Users();

 	  $user->setId($array['uid']);

 	  $user->setName($array['name']);

 	  $user->setLastname($array['lastname']);

 	  $user->setEmail($array['mail']);

 	  $userArr[] = $user;

   }

return $userArr;

  }

}

?>

Bem, como vocês viram, o que a metodologia MVC sugere é justamente organização, onde camada fica responsável pelo que ela realmente deve fazer.

No próximo artigo, tratarei a inserção de usuários usando estes mesmos controles e modelos.

Aproveitando também para indicar alguns links:

MVC (Wikipedia) – http://pt.wikipedia.org/wiki/MVC
Code Igniter (Excelente framework MVC/PHP) – http://www.codeigniter.com

Espera que tenham gostado, caso tenha dúvidas, entre em contato

Autor:

Marcus Cavalcanti

Professional PHP que atua no desenvolvimento avançado de aplicações de web há 5 anos. Atualmente também trabalhando com Java na plataforma JEE.

Anúncios

Um pensamento sobre “Arquitetura MVC em PHP

  1. Ola Evandro tudo bem? Estou utilizando estrutura MVC nas minhas aplicacoes PHP e gostaria de saber se voce tem algum post ou artigo onde trata as insercoes de usuarios. Se possivel voce poderia enviar o codigo fonte para visualizar como esta a estrutura?
    Muito obrigado.

    Fabricio Veiga
    fabriciostuff@gmail.com

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s