Olá leitores do iMasters. Durante algumas semanas trataremos de um assunto que a algum tempo vem recebendo a atenção que merece: O padrão de arquitetura MVC (Model, View e Controller).
Antes que você levante aos mão e proclame: “Ah não, mais um cara falando nesse tal de MVC. Estou cheio disso!!” Espere!
Não possuo a intenção de me aprofundar em um assunto tão difundido pela internet, aliás, existem muitas boas literaturas especializadas somente em MVC. Assunto esse que merece muito mais que algumas linhas de explicação.
O objetivo desse artigo é tomar na prática a implementação da arquitetura MVC utilizando o engine Smarty.
Mas o que é Smarty?
Tomando a definição do próprio site oficial (http://smarty.php.net), temos que Smarty é um sistema de templates para PHP, fornecendo uma maneira fácil de controlar a separação da aplicação lógica e o conteúdo de sua apresentação.
“O quê? Não entendi nada!”
Calma, vamos por partes.
O principal objetivo de se utilizar a arquitetura MVC é a de separar a lógica da aplicação (as regras de negócio do seu programa), da interface do usuário (as telas do programa) e do fluxo da aplicação (como são enviadas as mensagens dos eventos e para quem).
Mas porque eu teria um trabalho enorme em separar meu sistema nessas três camadas?
Não tenho uma resposta para essa pergunta…. Tenho várias!
Imagine a seguinte situação: Sua empresa precisa desenvolver um produto de software promissor e inovador. Segundo a estratégia da empresa, esse sistema deve se adequar a todos os tipos de interfaces clientes (celular, web, desktop, etc) e deve rodar em todas as plataformas existentes no mercado (windows, linux, etc), além disso, para economizar tempo, e consequentemente, dinheiro, a equipe responsável pelo design gráfico das telas trabalhará independente e paralelamente à equipe de programação. Outra coisa, os módulos desenvolvidos nesse projeto devem ser reutilizados em projetos futuros.
“E ai meu caro Dr. Watson, como resolver esse enigma?”
Eu escutei alguém gritando desesperandamente o acrônimo MVC??
Não preciso dizer que separar as funcionalidades em camadas é a solução. A figura 1 nos dá uma visão melhor do que estamos tratando.
“Mas onde entra o Smarty nisso tudo?”
E pra já!!
O Smarty é um engine (mecanismo) que nos permite separar a lógica de negócio da apresentação.
Quando falamos da definição do Smarty, nos referimos a um termo chamado “template”. Esse template nada mais é do que uma página HTML acrescentada de uma marcação especial nos lugares onde quero que apareça minhas informações de software.
Essa sistemática permite que trabalhemos na aplicação sem ao menos conhecermos a interface gráfica, bastando apenas que saibamos quais dados devem aparecer para o usuário, não importando como. E possível até mesmo trabalharmos com o conceito de POO (Programação Orientada a Objetos).
E o fim do chamado “código de macarrão”, aquele código cheio de if´s e for´s juntamente com o HTML. Um horror para desenvolvedores que devem informar determinados dados dependendo de uma tomada de decisão (ex: se ele for administrador, mostre isso, senão, mostre aquilo) e um pesadelo para os desenvolvedores que devem dar manutenção aos códigos dessas páginas. Lembrando também que devemos esperar o design pronto, para evitar o retrabalho de “remendar” o código para se adequar ao design recebido.
“Mas como funciona isso?”
Para exemplificar o uso do Smarty analise os códigos abaixo. Nesses códigos temos uma classe chamada Pessoa (Pessoa.class.php), uma página PHP (“mostrarPessoa.php”), e um arquivo HTML (“mostrarPessoa.html”).
A classe Pessoa possui apenas o atributo nome.
Pessoa.class.php
<?php
class Pessoa {
var $nome;
function Pessoa() {
$this->nome="";
}
}
?>
A página “mostrarPessoa.php” irá instanciar um objeto do tipo Pessoa e atribuir um nome (linha 10).
mostrarPessoa.php
<?php
require("Smarty.class.php");
require("Pessoa.class.php");
$smarty = new Smarty();
$smarty->template_dir = "templates";
$smarty->compile_dir = "templates_c";
$pessoa = new Pessoa();
$pessoa->nome = "Fulano da Silva";
$smarty->assign("pessoa",$pessoa);
$smarty->display("mostrarPessoa.html");
?>
E nessa página onde deve ficar a lógica de negócios e o uso do objetos de dominio. Perceba que todo o código PHP está contido nessa página e não se visualiza nenhum código HTML.
Ao utilizarmos o Smarty, devemos instanciar um objeto Smarty encontrado no download do engine. E nessa classe onde atribuímos os objetos que serão utilizados na visão e qual página deverá ser visualizada pelo cliente.
Note na linha 10 que atribuímos um nome para um atributo e o associamos com o nosso objeto pessoa. Esse nome deverá ser o mesmo utilizado na referência do arquivo HTML, Na linha 11, dizemos ao Smarty qual página deverá ser visualizada, passando-se o nome do arquivo.
Finalmente temos o arquivo HTML;
mostrarPessoa.html
<html>
<head>
</head>
<body>
Seja Bem-vindo {$pessoa->nome}
</body>
</html>
A apresentação da página ficará como a figura 2:
Não existe nenhum código PHP na página HTML, percebendo-se nitidamente a divisão de camadas e o aumento de facilidade em se manter o código, já que torna-se “limpo”.
Simples, não?!
Na próxima semana trabalharemos o Smarty mais aprofundado, falaremos sobre a instalação, conheceremos tags customizadas que nos possibilitam um maior poder de decisão sobre a visão e a utilização de componentes HTML pré-fabricados pelo Smarty.
Uma boa semana para todos. Abraços!