Uma introdução Suave ao MVC
O MVC é certamente o padrão de projeto mais disseminado nos dias de hoje. Trazido de volta à moda pelo Ruby on Rails em 2004, ele foi traduzido e implementado em muitas linguagens e em mais de 100 frameworks web. Este tutorial ilustrado é focado em ajuda-lo a atravessar a lacuna entre um script PHP tradicional e uma implementação completa do MVC.
Parte 1: Desmontando uma página tradicional
Você se lembra do community.com? Aqui está algo que poderia ser um script server-side (executado do lado do servidor) usado para gerar uma página mostrando todos os membros de um site (assumindo um uso mediano do PHP):
<html>
<?php include 'inc/header.php'; ?>
<h1>Members of community.com:</h1>
<?php
// INITIALIZING THE DATABASE
$connection = mysql_connect('host', 'user', 'password');
mysql_select_db('database', $connection);
// PULLING OUT THE DATA
$data = mysql_query('SELECT name FROM members');
// DISPLAYING THE DATA
echo '<ul>';
$i = 1;
while ($member = mysql_fetch_array($data)) {
echo '<li>Member #' . $i . ': '. $member['name'] . '</li>';
$i++;
}
echo '</ul>';
?>
</html>
o arquivo inc/header.php fica da seguinte forma:
<head>
<title>Community.com rocks!</title>
</head>
Nota: Este é um HTML muito básico sem um DOCTYPE
Uma vez que os dados forem obtidos do banco de dados no meio de tags HTML, cada vez que você precisar mostrar o nome dos membros do site, você precisa reescrever o trecho PHP/SQL, o que torna mais difícil dar manutenção no seu código. Ainda assim, embora esta não seja uma forma impecável de escrever um código, esta não é uma maneira "burra" de escreve-lo: podemos ver o desmontamento do código através do uso do include, que faz possível começar a dividir o código em partes reusáveis (o header, por exemplo).
Aqui estão algumas coisas que poderíamos fazer para organizar o script:
- Remover toda a lógica PHP (consultas ao banco de dados, formatação de dados, etc) da/entre as tags HTML e colar tudo acima da tag .
- Usar variáveis PHP (preenchidas com os dados obtidos do banco de dados) para armazenar dados das/entre tags HTML.
- Divisão do script: um para a lógica e o outro para a apresentação (baseado em variáveis PHP).
Aqui está um gráfico simples para entender melhor o processo:
O primeiro passo é o script original onde lógica de negócios (consulta ao banco de dados, obtendo os dados do banco de dados) é misturado com tags HTML. No segundo passo isolamos a lógica no início do script, mantendo as tags HTML abaixo do script e ligando os dois utilizando variáveis PHP. O terceiro passo é o passo final: nós simplesmente dividimos o script em duas partes (uma para a lógica e a outra para a apresentação em HTML). Aplicado ao nosso código, este seria o resultado no passo 3:
<?php
$connection = mysql_connect('host', 'user', 'password');
mysql_select_db('database', $connection);
$data = mysql_query('SELECT name FROM members');
$members = array();
while ($item = mysql_fetch_array($data)) {
$members[] = $item['name'];
}
include 'tpl/template.php';
?>
o arquivo tpl/template.php fica da seguinte forma:
<html>
<?php include 'tpl/header.php'; ?>
<h1>Members of community.com:</h1>
<ul>
<?php foreach ($members as $i => $member) : ?>
<li>Member #<?php echo $i + 1; ?>: <?php echo $member; ?></li>
<?php endforeach; ?>
</ul>
</html>
Nota: quando utilizamos o PHP como um template engine (isto é como estamos fazendo no segundo arquivo), é muito comum usar estruturas alternativas. Note também que mudei o diretório 'inc' para 'tpl', sendo este último encarregado de reunir todos os arquivos de template (o arquivo tpl/header, no passo 3 é o mesmo que o arquivo inc/header.php no passo 1).
Uma vez analisado, será exibida a seguinte saída HTML (supondo que existam apenas dois membros: Anna e Lisa):
<html>
<head>
<title>Community.com rocks!</title>
</head>
<h1>Members of community.com:</h1>
<ul>
<li>Member #1: Anna</li>
<li>Member #2: Lisa</li>
</ul>
</html>
Agora vamos nos afastar do script e dar uma olhada em toda a estrutura de requisições/respostas. Quando chamamos http://community.com/members.php, aqui está o que acontece:
- o arquivo members.php obtém uma conexão com o banco de dados, obtém todos os nomes dos membros e preenche um array com eles (chamado de $members).
- o arquivo members.php inclui o arquivo de template onde a variável $members é iterada e desta maneira é produzido o HTML final.
Isto pode ser chamado de arquitetura de View/Controller (Visão/Controle), onde o arquivo members.php é o controller e o arquivo tpl/template.php é o view:
Procedendo desta maneira, é possível separar a lógica da apresentação: primeiro executamos todas as consultas e então geramos a página HTML utilizando variáveis PHP.
Referências
Nemetral - Artigo Original (Parte 1)
5 comentários:
muito bom o artigo.
mas qual é a grande vantagem das estruturas alternativas? semântica?
Bom dia Guardião do Livro. Muito obrigado pela visita. :)
Como apenas traduzi o artigo, não sei responder à sua questão. Também fiquei em dúvida. Talvez seja o mais usado em template engines...
Se alguém souber esclarecer a afirmação do autor do artigo, por favor, compartilhe.
Um grande abraço.
Æ!!
Na verdade não é bem uma estrutura MVC, pois na verdade não tem o elemento Model para referenciar o que é banco de dados.
Apenas temos o elemento "view" que vai mostrar a parte visual do site, e o elemento "Controller" que vai cuidar da lógica do site, mas nesse caso o elemento controller tambem está cuidando da interação com o banco de dados.
Quanto as estruturas alternativas, eu creio que ele esteja falando da interação entre colocar o código HTML dentro de uma variável utilizando condicionais para depois apresentar a variável dentro do template.
Há braços
em relação à camada model, tem uma parte 2... dá uma olhada... não li tudo, mas já começa a falar da model.
get facebook likes
buy facebook likes
http://www.macygray.com/node/243 http://weeklyseven.com/news/2011/january/20/george-knapp?quicktabs_3=0
facebook likes buy facebook likes get facebook likes
Computer acting up...I need an antivirus of some kind. NOT willing to pay megabux for it. Anyone know of a DIRT CHEAP/ FREE way to download one?
facebook likes 1000 facebook likes [url=http://1000fbfans.info]buy facebook likes [/url] facebook likes
Postar um comentário