terça-feira, 23 de dezembro de 2008

PHP: Uma introdução suave ao MVC (Parte 2)

Na primeira parte, vimos como desmontar um script PHP tradicional, separando a lógica de negócios da apresentação. Este foi o maior passo a ser feito: a partir de agora, nós vamos ajustar essa separação adicionando um terceiro cara na equação: o model. Senhoras e senhores, esta é a parte 2 de uma introdução suave ao MVC.

Parte 2: MVC completo

O MVC defende Modelo/Visão/Controle. É um padrão de projeto defendendo o uso de três camadas:

o model: o model é a camada de acesso aos dados, a única responsável por recolher dados requisitados (por exemplo, funções como getAllMembers() retornando um array PHP com todos os membros nele, ou addMember($name, $age, $city) para adicionar um membro novo no banco de dados).

o view: o view é a camada de apresentação onde é gerada a saída (o HTML final na página WEB exibindo os nomes dos membros com PHP usado como uma linguagem de template como em <li><?php echo $member['name']; ?></li>)

o controller: o controller destina-se a coordenar todo o processo analisando as requisições, executando o modelo correpondente para obter os dados (chamando getAllMembers() e colocando o array retornado na variável PHP $members), chama o view correspondente (include 'tpl/template.php') e preenche-o com dados ($members) e então envia a saída.

Aqui está um gráfico simples para entender melhor o padrão de projeto MVC:

A nova arquitetura dá mais flexibilidade na construção da aplicação:
  • a camada de acesso aos dados é terceirizada para o modelo, assim podemos trabalhar com uma abstração de dados: os dados armazenados podem estar em um banco de dados ou em arquivos XML, continuaremos acessando a lista de membros através da função getAllMembers().
  • a camada de apresentação é terceirizada para a view: se quisermos que a saída seja um feed RSS ao invés de uma página HTML, nós teremos apenas que mudar o view sem interferir na lógica ou no acesso aos dados.
Como você pode ver, o MVC é extremamente poderoso porque ele possibilita a divisão do script em partes naturalmente independentes, o que torna verdadeiro o velho sonho de reusabilidade: por exemplo, se quisermos que a saída seja tanto uma página HTML quanto um feed RSS exibindo todos os membros do community.com, podemos reutilizar o mesmo modelo e simplesmente criar dois templates diferentes (os arquivos 'tpl/template.php' e 'tpl/rss.php').

Agora vamos voltar para a implementação do padrão de projeto MVC. Chamando o controller diretamente através do endereço http://community.com/members.php, ele pode ser melhorado um pouco mais. Ao invés de chama-lo diretamente, vamos criar um ponto de entrada único chamado de router especificando que nós queremos mostrar os membros da página, este router analisará a requisição e entenderá que nós queremos mostrar a página membros, e executará o controller members.php. No CodeIgniter por exemplo, o ponto de entrada único é chamado de index.php e se quisermos chamar o controller members, teremos que digitar a seguinte URL: http://community.com/index.php/members. Nós também podemos imaginar uma URL menos sexy http://community.com/index.php?controller=members ou, ao contrário, se livrar do router através de algumas reescritas de URL e apenas chamar um elegante http://community.com/members.

Aqui está o que adicionamos ou clareamos nesta implementação MVC:
  • o router é o único ponto de entrada da aplicação que analisa cada requisição e carrega o controller correspondente.
  • o modelo interage com o banco de dados (mais uma vez, pode ser um conjunto de arquivos XML ou qualquer outra maneira de guardar dados, nós teríamos apenas que reescrever o modelo sem se preocupar com a saída final)
  • agora o view se torna o layout principal, que por sua vez, pode incluir sub-templates reutilizáveis (isto é diretamente inspirado no Ruby on Rails e tem sido reproduzido em muitos frameworks web)
Referências
Nemetral - Artigo Original (Parte 2)

5 comentários:

CMilfont disse...

Tem erros conceituais gritantes no artigo original, MVC não tem relação com camadas, mais explicação você pode encontrar aqui
http://www.milfont.org/tech/2008/09/08/mvc-model-3-e-camadas/

ScornInPC disse...

De qualquer forma, muito legal a iniciativa. Vamos esperar até as partes praticas, com mais de um controller e tal, coisa que até hoje não achei um artigo legal sobre o assunto.

Não desanime não =D

silas ribas disse...

Salve,

Muito boa a iniciativa e os artigos, espero que melhore cada vez mais.

Sucesso!

Anônimo disse...

The goal of Clomid cure in treating infertility is to seat conformist ovulation willingly prefer than origin the condition of numerous eggs. In olden days ovulation is established, there is no emoluments to increasing the dosage supplementary . Numerous studies advertise that pregnancy almost always occurs during the elementary three months of infertility remedial programme and treatment beyond six months is not recommended. Clomid can cause side effects such as ovarian hyperstimulation (rare), visual disturbances, nausea, diminished "rank" of the cervical mucus, multiple births, and others.

Clomid is often prescribed past generalists as a "leading crinkle" ovulation induction therapy. Most patients should be subjected to the fertility "workup" previously to to outset any therapy. There could be many causes of infertility in appendix to ovulatory disorders, including endometriosis, tubal blight, cervical factor and others. Also, Clomid therapy should not be initiated until a semen criticism has been completed.
Clomid and Other Ovulation Inducti
Somali pirates inflate at large their attacks against worldwide ships in and all all from the Useless of Aden, undeterred end the discouragement of stepped-up worldwide naval escorts and patrols - and the increased fail in capacity of their attacks. Below-stairs agreements with Somalia, the U.N, and each other, ships relationship to fifteen countries these days discombobulate c snarl the area. Somali pirates - who sire won themselves wellnigh $200 million in deliverance since more the start 2008 - are being captured more again vogue, and handed in to authorities in Kenya, Yemen and Somalia in return trial. Collected here are some up to old-fashioned photos of piracy in another chore the toboggan of Somalia, and the cosmopolitan efforts to limitation it in.
[url=http://rc8board.com/members/clomid-side-effects-men-71.aspx]clomid side effects men[/url]
[url=http://james.newtonking.com/members/no-prescription-for-clomid-79/default.aspx]no prescription for clomid[/url]
[url=http://community.qmag.dk/members/soy-milk-helps-clomid-side-effects-52/default.aspx]soy milk helps clomid side effects[/url]
[url=http://dev.hey-oye.com.asp1-7.websitetestlink.com/members/pregnancy-and-clomid-23/default.aspx]pregnancy and clomid[/url]
tel:95849301231123

Anônimo disse...

Yes undoubtedly, in some moments I can reveal that I agree with you, but you may be considering other options.
to the article there is quiet a without question as you did in the fall issue of this solicitation www.google.com/ie?as_q=lyrics miranda lambert revolution ?
I noticed the axiom you have not used. Or you partake of the dark methods of helping of the resource. I take a week and do necheg