PDF - Revista Eletrônica Interdisciplinar

Propaganda
Revista
Interdisciplinar
Digitally signed by Revista
Interdisciplinar
DN: cn=Revista Interdisciplinar,
o=UNIVAR, ou,
[email protected], c=BR
Date: 2009.12.09 11:19:35 -02'00'
PADRÕES DE PROJETOS (DESIGN PATTERNS) PARA WEB COM
PHP
Carlos David Rocha de Souza1
RESUMO
O desenvolvimento utilizando padrões de projeto (Design Patterns) não deve ser considerado uma maneira de
reutilização de códigos prontos, mas sim boas idéias de desenvolvê-los. A finalidade deste artigo é mostrar boas
práticas de programação orientada a objeto, com aplicação de padrões de projeto enterprise para solucionar o
problema proposta pela aplicação web utilizando a linguagem de programação PHP5 (Hypertex Preprocessor), o
servidor web/SGDB WampServer2.0h (Apache, PHP5, phpMyAdmin e MySQL) e IDE NetBeans 6.5.
Palavras-chave: Design Patterns; PHP; MVC – Model View Controller.
DESIGN PATTERNS FOR WEB WITH PHP
ABSTRACT
The development using Design Patterns should not be considered a way of reutilization of ready codes, but, good
ideas for developing them. The objective of this article is to show good practice of programming guided to
object, with application of Design Patterns enterprise to solve the problem proposed by the application web using
the programming language PHP5 (Hypertex Preprocessor), the server web/SGDB WampServer2.0h (Apache,
PHP5, phpMyAdmin and MySQL) and GO NetBeans 6.5.
Key-Words: Design Patterns; PHP; MVC – Model View Controller.
INTRODUÇÃO
Logo após aprender uma linguagem de programação ao avaliar outros projetos e
percebendo que códigos de outros desenvolvedores aparentam ser mais complexo e com um
funcionamento melhor, daí geralmente nasce um questionamento de como alcançar tal grau de
excelência no desenvolvimento de aplicativos. Neste artigo, trataremos do conceitos e práticas
de regras ou padrões de projetos, comumente chamadas de Design Pattern que é uma maneira
de alcançar um objetivo no desenvolvimento de aplicativos com linguagem de programação
orientada a objetos codificando classes e métodos.
Os padrões de projetos estão em um nível mais elevado do que o próprio código
desenvolvido, buscando mostrar como alcançar um objetivo e auxiliando no desenvolvimento
mais eficaz do código orientado a objeto.
Dessa forma, além da usar a metodologia de pesquisa bibliográfica, neste artigo
expressamos uma abordagem de estudo de caso ao exemplificar por meio de uma aplicação
para web e seu caso de uso que utiliza design pattern para solucionar o caso proposto no
desenvolvimento em camadas do aplicativo para otimizar a segurança do código.
2. PADRÃO DE PROJETO (DESIGN PATTERN)
No desenvolvimento de sistemas de deparado algum problema que fica a
impressão que já foi visto antes e criado uma solução para tal, porém não foi elaborado uma
documentação sobre a solução nem se guardou em memória.
____________________________________
1
Tecnólogo em Sistemas de Informação (2005); Especialista em ciências da computação (2007).
Atuante na área da tecnologia da informação desde 1997. Atualmente é professor na Faculdades Unidas do Vale
do Araguaia; Analista de redes na Bmz Couros Ltda e Desenvolvedor de Aplicações Orientadas a Objeto e para
Web. E-mail: [email protected]
É neste ponto que se aplica o padrão de projeto, pois para GABRIEL (2008), não
é mais aceitável que a cada vez que deparasse com uma determinada situação, até repetitiva,
tenha que se pensar novamente em uma busca de uma solução nova. O que dever ser feito no
momento de identificação pela primeira vez de uma situação, é documentá-la. Para isso devese dar um nome, explicando o contexto no qual está inserida, descrevendo a solução
encontrada e mostrando as consequências desta solução, de forma que da próxima vez que
esta situação for identificada, conte com a ajuda dessa documentação para solucionar o
problema.
Este tipo de documentação da solução de um problema faz com que os
profissionais menos experientes possam aprender a partir da experiência documentada de
outros profissionais e não tenham um que começar do zero. Dessa forma evita-se erros
cometidos anteriormente até que se chegue a um resultado ou solução satisfatória, ganhando
tempo no desenvolvimento da aplicação final.
A utilização de padrões de projetos no desenvolvimento de aplicações otimiza na
elaboração da documentação facilitando na manutenção dos sistemas já existentes. Segundo
GONÇALVES (2007), um padrão descreve um problema que ocorre inúmeras vezes em
determinado contexto, e descreve ainda a solução para esse problema, de modo que essa
solução possa ser utilizada sistematicamente em distintas situações.
Para DALL’OGLIO (2007) um padrão pode ser definido como a abstração de
uma forma concreta que se repete em um contexto específico não-arbitrário.
Já MELO (2007) afirma que:
Cada pattern é uma regra de trê partes, uma que expressa uma relação entre
um certo contexto, um certo sistema de forças que ocorre repetidamente
nesse contexto, e uma certa configuração de software que permite que estas
forças sejam resolvidas.
3. TIPOS DE PADRÕES DE PROJETO
Os padrões são organizados em grupos e nomeados a partir de suas
funcionalidades de utilização. A seguir apresentaremos topicamente as descrições dos mais
comuns.
3.1 Padrões Estruturais
Descreve como os objetos interagem entre si. Em outras palavras, eles abordam o
framework estrutural dos objetos:
• Bridge: Separa uma abstração de sua implementação, de modo que as duas
possam variar independentemente.
• Adapter: Permite que dois objetos se comuniquem mesmo que tenha interfaces
incompatíveis.
• Composite: Agrupa os objetos em estrutura de árvore para representar a
hierarquia do tipo partes - todo. O Composite permite que os clientes tratem
objetos individuais e composições de objetos de maneira uniforme.
• Decorator: Atribui responsabilidade adicionais a um objeto dinamicamente.O
Decorator fornece uma alternativa flexível a subclasses para a extensão da
funcionalidade.
• Facade: Fornece uma interface única para um subsistema com diversas
interfaces. O Façade define uma interface de nível mais alto que torna o
subsistema mais fácil de usar.
• Flyweight: Usa compartilhamentos para dar suporte inúmeros objetos, de
granularidade fina, de forma eficiente.
• Proxy: Fornece um objeto representante ou marcador de outro objeto, para
controlar o acesso ao mesmo.
3.2 Padrões Comportamentais
Descreve como podemos usar os objetos para alterar o comportamento de um
sistema em tempo de execução:
• Observer: Define um uma dependência um-para-muitos entre objetos, de modo
que, quando um objeto muda de estado todos os seus dependentes são
notificados e atualizados.
• Mediator: Cria um objeto que age como um mediador, controlando a interação
entre um conjunto de objetos.
• Chain of Responsibility: Evita o dependência do remetente (cliente) de uma
requisição ao seu destinatário, dando a oportunidade de mais de objeto tratar a
requisição.
• Command: Encapsula uma requisição como um objeto, desta forma permitindo
que você parametrize clientes de diferentes solicitações.
• Interpreter: É usado para ajudar uma aplicação a entender uma declaração de
linguagem natural e executar a funcionalidade da declaração.
• Iterator: Oferece um método (um meio) para fazer acesso aos elementos de
uma coleção.
• Visitor: É usado Quando as operações necessitam ser realizadas sobre
inúmeros elementos de um modelo de objeto.
• Template Method: Define o esqueleto de um algoritmo em uma operação,
adiando a definição de alguns passos para as subclasses.
• Memento: Possibilita armazenar o estado de um objeto de modo que o mesmo
possa ser recuperado.
• State: Permite que um objeto altere seu comportamento quando se estado
interno muda.
• Strategy: Define uma família de algoritmos, encapsular cada um deles e fazêlos intercambiáveis.
3.3 Padrões de Criação
São utilizados no instante da criação do objeto e são divididos em:
• Abstract Factory: Provê uma interface para criação de famílias de objetos
relacionados ou dependentes sem especificar suas classes concretas.
• Factory Method: Define uma interface para criar um objeto, mas deixa as
subclasses decidirem qual classe a ser instanciada.
• Singleton: Garante que uma classe tenha somente uma "instance" (objeto)
Builder Separa a construção de um objeto complexo da sua representação, de
modo que o mesmo processo de construção possa criar diferentes
representações.
• Prototype: Especifica os tipos de objetos a serem criados usando uma
"instance" prototípica e criar novos objetos copiando este protótipo.
3.4 Padrões Enterprise
3.4.1 MVC - Model-View-Controller
O padrão Model-View-Controller é um padrão de arquitetura ou seja ele indica
o que dever ser organização global do sistema. Ele sugere a separação por camadas modelo,
visão e controle da aplicação:
• Modelo (Model): encapsula o estado da aplicação, responde consulta do seu
estado, expõe funcionalidade da aplicação, e notifica a visão de mudanças.
• Controle (Controller): define comportamento do aplicativo, mapeia usuários
gestores para atualizações no modelo, seleciona visão para resposta, um visão
para cada funcionalidade.
• Visão (View): detem o modelo, pede atualizações ao modelo, manda usuários
gestores ao controlador, permite o controlador escolher visão.
4. AMBIENTES DE DESENVOLVIMENTO E USO DOS PADRÕES DE PROJETO
Antes da escolha do padrão de projeto a ser adotado é importante conhecê-lo por
completo, com a realização de uma leitura abrangente de sua fundamentação teórica. É
recomendado que se se estude as seções de descrição do problema a ser solucionado e do
padrão a ser adotado na solução, pesquise exemplos de códigos do padrão escolhido, defina
nomes para os participantes do padrão que tenham sentido no contexto da aplicação. Também
qe se defina de forma lógica e padronizada os nomes para as classes a serem criadas e
codificadas, especifique nomes para aplicação e operações do padrão, que se codifique a
operação para suportar as responsabilidades e colaborações presentes na solução do programa
proposto.
4.1 – Ambientes de Desenvolvimento:
Outro aspecto a considerar são as escolhas das ferramentas de auxílio ao
desenvolvedor. Alguns dos ambientes de desenvolvimento mas utilizados e que trazem maior
produtividade na implementação são:
4.1.1 NETBEANS
O NetBeans no atual mercado de IDEs de desenvolvimento é considerado uma
das melhores do mercado open source. Desenvolvida pela Sun Microsystems e mantida pela
comunidade, a cada versão vem se mostrando uma madura e consistente ferramenta para
desenvolvimento.
No desenvolvimento de aplicações web essa IDE vem sendo uma excelente
alternativa para aqueles que desejam desenvolver de forma rápida e simples suas aplicações,
por possuir sistema de depuração em tempo de desenvolvimento, mostrando as falhas de
digitação, variáveis não declaradas, métodos inexistentes, importações de bibliotecas entre
outras funções.
4.1.2 WAMPSERVER
WampServer é um software publicado sob a GNU General Public License
desenvolvido pela PHP Team. É usado para instalar rapidamente no computador os softwares
PHP 5, MySQL e Apache, disponibilizando suporte ao uso de scripts PHP localmente no
windows. A versão da aplicação para sistema operacional Linux é Lamp que contem todos os
aplicativos e funcionalidades da versão plataforma windows.
4.1.3 DBDESIGNER
Editor visual para criação de banco de dados mySQL que integra criação,
modelagem, desenvolvimento e manutenção dos bancos em um ambiente simples e agradável.
Comparável com produtos como Oracle's Designer, IBM's Relational Rose, CA Erwin. O
DBDesigner é OpenSource distribuído sobre a licença GPL.
4.2. Aplicação – ARTIGOMVCPHP
Com a evolução da internet há uma crescente movimentação no desenvolvimento
de sistema que sejam separados e desenvolvidos em camadas. Dessa forma, o problema
proposto é desenvolver um aplicativo para web divido em camadas para ter uma maior
proteção de seu código acesso rápidas e seguro a base de dados. Um aplicativo que na sua
camada de apresentação ao browser do usuário não contenha scripts query que possam ser
capturados e manipulados por hackers. Buscando a solução de tal problema, será adotado
neste caso de uso o padrão de projeto Model-View-Controller. Onde a aplicação será dividida
em camadas.
A Primeira Camada Model (modelo) será codificada uma classe com o nome
class.pessoa.php essa classe era responsável pelo modelo de negócios da aplicação nela será
codificado os atributos, nome, endereço, bairro, cidade, uf, telefone, os métodos get e set para
cada atributo, e os métodos para manipulações do banco de dados através de strings query, o
método all( ) será responsável por efetuar uma consulta no banco de dados de todos os dados
cadastrados e armazenado em um array, o método intoPessoa ( ) será responsável por pegar todos
os dados instanciados no objeto pessoa e gravar no banco de dados, o método alterPessoa ( ) será
responsável por alterar os dados já cadastrados em banco através de um identificador que será o
idtbpessoa, o método delPessoa( ) será responsável por excluir informações cadastradas em banco
através de um identificador que será o idtbpessoa.
A Segunda camada Controller (Controlador) será responsável pelo comportamento do
aplicativo, mapeando o acesso aos métodos contidos na class.pessoa.php a mesma será codificada
com o nome class.control.pessoa ela terá o atributo control que recebera a string que o usuário
desejar ter acesso, o método Controle será responsável por acessar o método all ( ) da classe
model, o método cadPessoa será responsável pelo controle do método intoPessoa ( ) da classe
model, o método alterPessoa ira controlar o método alterPessoa ( ) da classe model e o método
delPessoa ira controlar o método delPessoa ( ) da class model.
A Terceira camada é a responsável por interagir com o browser do usuário será
codificada uma classe com o nome view_pessoa.php nela terá as chamadas do controlador pra
visualização de dados e manipulações pelo browser do usuário onde o mesmo terá respostar em
código HTML no protocolo http.
A Camada conexão com SGDB e banco, será codificado uma classe php com o nome
conexaoDB.php ela será responsável por estabelecer uma comunicação com o banco de dados
artigodb e o SGDB MySQL.
Antes e iniciar a programação dos códigos com o auxilio da ferramenta de
modelagem de banco de dados o DBDesigner será criado um Diagrama de Entidades e
Relacionamentos da tabela tbpessoa e depois sincronizar a modelagem com o banco para geração
da tabela modelada.
Figura 01 – DER tbpessoa
Com o auxilio da IDE NetBeans será criado um projeto de modelagem UML com
o nome UMLArtigoMVCPHP para criação da representação do diagrama de classes.
Figura 02 – Diagrama de Classes Projeto artigomvcphp
Utilizando a IDE NetBeans será criado um projeto para web e php com o nome
artigomvcphp e salvo na pasta C:\wamp\www\artigomvcphp\ onde foi salva as codificações
php. descritas abaixo, por meio do código responsável pela comunicação com SGDB MySQL
e banco de dados:
conexaoDB.php
<?php
$local = 'localhost';
$login = 'root';
$senha = '';
$banco = 'artigodb';
mysql_pconnect($local, $login, $senha);
mysql_select_db($banco);
?>
Logo a seguir, temos o código responsável pela primeira camada model (modelo):
class.pessoa.php
<?php
require('../config/conexaoDB.php');
class Pessoa {
public $nome;
public $endereco;
public $bairro;
public $cidade;
public $uf;
public $telefone;
public $idtbpessoa;
protected function getNome(){
return $nome;
}
protected function getEndereco(){
return $endereco;
}
protected function getBairro(){
return $bairro;
}
protected function getCidade(){
return $cidade;
}
protected function getUf(){
return $uf;
}
protected function getTelefone(){
return $telefone;
}
protected function getIdtbpessoa(){
return $idtbpessoa;
}
protected function setNome($nome)
{
$this->nome = $nome;
}
protected function setEndereco($endereco)
{
$this->endereco = $endereco;
}
protected function setBairro($bairro)
{
$this->bairro = $bairro;
}
protected function setCidade($cidade)
{
$this->cidade = $cidade;
}
protected function setUf($uf)
{
$this->uf = $uf;
}
protected function setTelefone($telefone)
{
$this->telefone = $telefone;
}
protected function setIdtbpessoa($idtbpessoa)
{
$this->idtbpessoa = $idtbpessoa;
}
public function all()
{
$sql = "SELECT * FROM `tbpessoa`";
$result = mysql_query($sql);
while($dados = mysql_fetch_array($result))
{
$pessoa = new Pessoa();
$pessoa->setIdtbpessoa(array('idtbpessoa' => $dados['idtbpessoa']));
$pessoa->setNome(array('nome' => $dados['nome']));
$pessoa->setEndereco(array('endereco' => $dados['endereco']));
$pessoa->setBairro(array('bairro' => $dados['bairro']));
$pessoa->setCidade(array('cidade' => $dados['cidade']));
$pessoa->setUf(array('uf' => $dados['uf']));
$pessoa->setTelefone(array('telefone' => $dados['telefone']));
$arr[] = $pessoa;
}
return $arr;
}
public function intoPessoa($nome,$endereco,$bairro,$cidade,$uf,$telefone)
{
$sql = "INSERT INTO `tbpessoa` ( `idtbpessoa` , `nome`,`endereco`,`bairro`, `cidade`,`uf`,`telefone`)
VALUES (NULL , '$nome','$endereco','$bairro','$cidade','$uf','$telefone');";
mysql_query($sql);
}
public function delPessoa($idtbpessoa){
$sql = "DELETE FROM `tbpessoa` WHERE `tbpessoa`.`idtbpessoa` = $idtbpessoa;";
mysql_query($sql);
}
public function
alterPessoa($alteridtbpessoa,$alternome,$alterendereco,$alterbairro,$altercidade,$alteruf,$altertelefone){
if($alternome != ''){
$sql= "UPDATE `artigodb`.`tbpessoa` SET `nome` = '$alternome' WHERE `tbpessoa`.`idtbpessoa`
=$alteridtbpessoa;";
mysql_query($sql);
}
if($alterendereco != ''){
$sql= "UPDATE `artigodb`.`tbpessoa` SET `endereco` = '$alterendereco' WHERE `tbpessoa`.`idtbpessoa`
=$alteridtbpessoa;";
mysql_query($sql);
}
if($alterbairro != ''){
$sql= "UPDATE `artigodb`.`tbpessoa` SET `bairro` = '$alterbairro' WHERE `tbpessoa`.`idtbpessoa`
=$alteridtbpessoa;";
mysql_query($sql);
}
if($altercidade != ''){
$sql= "UPDATE `artigodb`.`tbpessoa` SET `cidade` = '$altercidade' WHERE `tbpessoa`.`idtbpessoa`
=$alteridtbpessoa;";
mysql_query($sql);
}
if($alteruf != ''){
$sql= "UPDATE `artigodb`.`tbpessoa` SET `uf` = '$alteruf' WHERE `tbpessoa`.`idtbpessoa` =$alteridtbpessoa;";
mysql_query($sql);
}
if($altertelefone != ''){
$sql= "UPDATE `artigodb`.`tbpessoa` SET `telefone` = '$altertelefone' WHERE `tbpessoa`.`idtbpessoa`
=$alteridtbpessoa;";
mysql_query($sql);
}
}
}
?>
O fragmento do código responsável pela segunda camada controller(Controlador)
está colocado a seguir:
class.control.pessoa.php
<?php
require('../model/class.pessoa.php');
class Control {
public $control;
public function Controle()
{
$this->control = new Pessoa();
return $this->control->all();
}
public function
alterPessoa($alteridtbpessoa,$alternome,$alterendereco,$alterbairro,$altercidade,$alteruf,$altertelefone){
if($alteridtbpessoa == ''){
print "=*Ao alterar uma pessoa, é obrigatório informar o ID.<br>";
}else{
$this->control = new Pessoa();
$this->control>alterPessoa($alteridtbpessoa,$alternome,$alterendereco,$alterbairro,$altercidade,$alteruf,$altertelefone);
}
}
public function delPessoa($idtbpessoa){
if($idtbpessoa == '' ){
print "=* Se estiver tentando excluir uma pessoa, não esqueça de informar o ID.<br>";
}
else{
$this->control = new Pessoa();
$this->control->delPessoa($idtbpessoa);
print " -Pessoa excluido com sucesso!.<br>";
}
}
public function cadPessoa($nome,$endereco,$bairro,$cidade,$uf,$telefone)
{
if($nome == '' || $endereco == '' ||$bairro == '' ||$cidade== '' ||$uf == '' ||$telefone == '') {
print "=*Ao inserir um registro é obrigatório informar: Nome, endereco, bairro, cidade, uf, telefone <br>";
}
else {
$this->control = new Pessoa();
$this->control->intoPessoa($nome,$endereco,$bairro,$cidade,$uf,$telefone);
A seguir temos o fragmento do código responsável pela terceira camada
view(Visão):
view_pessoa.php
<?php
require('../control/class.control.pessoa.php');
.
.
<body>
<p>Gravar Informações Pessoa</p>
<form id="form1" name="form1" method="post" action="">
<table width="707" height="242" align="left">
<tr>
<td colspan="2">Formulário de Cadastro de Pessoas</td>
</tr>
<tr>
<td width="61">Nome:</td>
<td width="630"><label>
<input name="nome" type="text" id="nome" size="102" maxlength="100" />
</label></td>
</tr>
<tr>
<td>Endereço:</td>
<td><input name="endereco" type="text" id="endereco" size="102" maxlength="100" /></td>
</tr>
<tr>
<td>Bairro:</td>
<td><input name="bairro" type="text" id="bairro" size="52" maxlength="50" /></td>
</tr>
<tr>
<td>Cidade:</td>
<td><input name="cidade" type="text" id="cidade" size="102" maxlength="100" /></td>
</tr>
<tr>
<td>UF:</td>
<td><select name="uf" id="uf">
<option value="AM">AM</option>
<option value="MT">MT</option>
</select>
<label></label></td>
</tr>
<tr>
<td>Telefone</td>
<td><input name="telefone" type="text" id="telefone" size="16" maxlength="14" /></td>
</tr>
<tr>
<td height="43" colspan="2"><label>
<input type="submit" name="button" id="button" value="Gravar" />
</label></td>
</tr>
</table>
</form>
<p>Alterar Informações Cadastradas</p>
<form id="form2" name="form2" method="post" action="">
<table width="707" height="242" align="left">
<tr>
<td colspan="2">Formulário de Manutenção de Pessoas</td>
</tr>
<tr>
<td width="61">ID:</td>
<td width="630"><label>
<input name="alteridtbpessoa" type="text" id="alteridtbpessoa" size="13" maxlength="11" />
</label></td>
</tr>
<tr>
<tr>
<td width="61">Nome:</td>
<td width="630"><label>
<input name="alternome" type="text" id="alternome" size="102" maxlength="100" />
</label></td>
</tr>
<tr>
<td>Endereço:</td>
<td><input name="alterendereco" type="text" id="alterendereco" size="102" maxlength="100" /></td>
</tr>
<tr>
<td>Bairro:</td>
<td><input name="alterbairro" type="text" id="alterbairro" size="52" maxlength="50" /></td>
</tr>
<tr>
<td>Cidade:</td>
<td><input name="altercidade" type="text" id="altercidade" size="102" maxlength="100" /></td>
</tr>
<tr>
<td>UF:</td>
<td><select name="alteruf" id="alteruf">
<option value="AM">AM</option>
<option value="MT">MT</option>
</select>
<label></label></td>
</tr>
<tr>
<td>Telefone</td>
<td><input name="altertelefone" type="text" id="altertelefone" size="16" maxlength="14" /></td>
</tr>
<tr>
<td height="43" colspan="2"><label>
<input type="submit" name="button" id="button" value="Alterar" />
</label></td>
</tr>
</table>
</form>
<p>Exluir Informações Cadastradas</p>
<form id="form3" name="form3" method="post" action="">
<table width="707" height="98" align="left">
<tr>
<td height="33" colspan="2">Formulário de Exclusão de Pessoas</td>
</tr>
<tr>
<td width="61" height="29">ID:</td>
<td width="630"><label>
<input name="idtbpessoa" type="text" id="idtbpessoa" size="13" maxlength="11" />
</label></td>
<td height="26" colspan="2"><label>
<input type="submit" name="button" id="button" value="Excluir" />
</label></td>
</tr>
</table>
</form>
<p align="left">Lista dos Dados Cadastrados</p>
<table width="1234" align="left">
<tr bordercolor="#FFFFFF" bgcolor="#333333">
<td width="68"><div align="left" class="style1">Código</div></td>
<td width="278"><div align="left" class="style1">Nome</div></td>
<td width="223"><div align="left" class="style1">Endereço</div></td>
<td width="156"><div align="left" class="style1">Bairro</div></td>
<td width="288"><div align="left" class="style1">Cidade</div></td>
<td width="32"><div align="left" class="style1">UF</div></td>
<td width="143"><div align="left" class="style1">Telefone</div></td>
</tr>
<?php
$c = new Control();
$arr = $c->Controle();
for ($i = 0; $i < count($arr); $i++)
{
?>
<tr bgcolor="#CCCCCC">
<td><div align="left" class="style2">
<?php
print $arr[$i]->idtbpessoa['idtbpessoa'];
.
.
print $arr[$i]->telefone['telefone'];
?>
</div></td>
</tr>
<?php
}
?>
</table>
<p> </p>
<p> </p>
</body>
</html>
Efetuando o acesso com o browser, pode ser visualizado o resultado da aplicação e
envio de pedidos para manipulação de dados. A figura abaixo demonstra visualização do
browser cliente:
Figura 03 – Tela do Browser
CONSIDERAÇÕES FINAIS
O principal propósito deste artigo foi proporcionar ao leitor um estudo de caso
que demonstrasse na pratica como utilizar um padrão de projeto em uma aplicação web. O
estudo foi realizado com a linguagem de programação PHP5 para codificação de suas classes.
Os padrões de projetos vão mais alem do que a própria programação do código e
da engenharia de seus diagramas, a sua principal busca é a melhoria da lógica de solução de
problemas propostos reutilizando o padrão em outras aplicações. Havendo necessidade de
criação de novas telas de cadastro bastaria ao desenvolvedor utilizar o mesmo padrão adotado
e testando para criação das classes de model, controller e view.
Levando em consideração que um dos maiores problemas, falando em
desenvolvimento de sistemas, não é codificação inicial, mas sim a manutenção do código,
com o padrão adotado no artigo o MVC isso seria solucionado já que ele trabalha em camadas
facilitando a manutenção de suas telas lembrando que o plano de negócio estaria protegido
contra possíveis erros de codificação.
REFERÊNCIAS BIBLIOGRÁFICAS
DALL’OGLIO, Pablo. PHP – PROGRAMAÇÃO COM ORIENTAÇÃO A OBJETO:
design patterns: São Paulo – SP. Novatec Editora Ltda 2007.
MELO, Alexandre Altair de. PHP – PROFISSIONAL: design patterns, wampserver: São
Paulo – SP. Novatec Editora Ltda 2007.
GONÇALVES, Edson. DESENVOLVENTO APLICAÇÕES WEB: model-viewcontroller: Rio de Janeiro – RJ. Editora Ciência Moderna Ltda 2007.
GONÇALVES, Edson. DESENVOLVENTO APLICAÇÕES WEB COM NETBEANS
IDE 6: model-view-controller, netbeans: Rio de Janeiro – RJ. Editora Ciência Moderna Ltda
2008.
Download