Canais iMasters

PHP + Banco de Dados

Construindo uma Arquitetura de Desenvolvimento em PHP 5

Iremos, nesse artigo, entender como funciona um Sistema divido em Camadas e construir uma classe de manipulação de Banco de Dados.

Pré-Requisitos

Saber conceitos de Orientação a Objeto, e XML.

Introdução

O PHP vem crescendo muito e está sendo usado hoje em dia em desenvolvimento de software e vou falar e mostrar exemplos práticos ao longo do tempo sobre esse tipo de aplicação com o php. Geralmente, quando construímos aplicações pequenas ou de fácil interação, nós, “falando de programação”, colocamos a “lógica do negócio” nas mesmas páginas e não nos preocupamos muito com a divisão da lógica de programação em partes.

Mas para aplicações de médio e grande porte (E-Commerce, Portais, etc) se fizermos isso, iremos com certeza cair em uma bagunça que não teremos mais volta, já vi muito dessas coisas aconterem com pessoas conhecidas, é por isso que eu vou conceituar e construir uma “Arquitetura de Desenvolvimento” para nosso sistema ganhar mais performance e abrangência. Também conhecida como arquitetura das três camadas (Banco de Dados, Regras de Negócio e Interface com o Usuário).

Vamos entender mais com a figura abaixo:

Entendendo

Interface com o Usuário - Entrada e saída de dados. A única visão do sistema pelo usuário.
Regras de Negócio - São Classes que validam do dados vindo da Interface com Usuário, retornam mensagens de erro quando houverem. Também responsável por levar e trazer informações do Banco de Dados.
Banco de Dados - Camada responsável pela comunicação e manutenção de dados e informações.

Agora, como construir esse tipo de aplicação? Bom, iremos precisar de uma Pattern, o que seria isso? Uma organização das camadas. Veja a figura abaixo e compreenda.

A pasta mãe eu chamo de fábrica porque nós estamos propondo uma fábrica de software (pelos menos a pattern), neste artigo não irei falar sobre levantamento e requisitos.

A pasta Arquitetura irá conter as classes utilitárias do sistema, ex: Banco de Dados, E-mail, Manipulação de Arquivos, etc.

A pasta Negócio conterá as classes que compôem a lógica dos nossos sistemas. Já a pasta Sistema conterá as páginas que farão a troca de dados com o usuário.

Agora, sabendo disso, iremos construir uma pequena aplicação com esse conceitos.

A Arquitetura

Na pasta Arquitetura ficam as classes utilitárias dos aplicativos a serem criados, veremos agora a classe que manipula o banco de dados (usarei o MySQL, mas nada impede de usar outro banco).

class BancodeDados {

private $host;
private $username;
private $password;
private $connection;
private $squema;

public function BancodeDados($resource) {

$xml = simplexml_load_file($resource);

$this->host = $xml->sessionfactory->host;
$this->username = $xml->sessionfactory->username;
$this->password = $xml->sessionfactory->password;
$this->squema = $xml->sessionfactory->database;

}

public function conecta() {

$this->connection = mysql_connect($this->host, $this->username,$this->password);
mysql_select_db($this->squema,$this->connection);

return $this->connection;

}

public function desconecta() {

mysql_close($this->connection);

}

public function updateSQL($sql) {

$r = mysql_query($sql,$this->connection);
if($r == 0) {
return false;
} else {
return true;
}

}

public function executaSQL($sql) {

$retorno = mysql_query($sql,$this->connection);
return $retorno;

}

public function iniciarTransacao() {

$this->executaSQL("begin");

}

public function efetivarTransacao() {

$this->executaSQL("commit");

}

public function desfazerTransacao() {

$this->executaSQL("rollback");

}

}

Entendendo o código

A classe receberá os atributos host, username, password e squema para fazer a conexão.
Estes atributos vindos de um arquivo xml. Sendo que o caminho desse arquivo é passado como parâmetro no método construtor.

--version 1.0--
--configuration--
--sessionfactory--
--host--localhost--/host--
--username--root--/username--
--password--abc--/password--
--database--exclusiva--/database--
--/sessionfactory--
--/configuration--

No método construtor os atributos são inicializados com os dados vindos do XML. O método updateSQL() executa a query e retorna true ou false. O método executaSQL() executa a query e retorna os registros. Os métodos iniciarTransacao(), efetivarTransacao() e desfazerTransacao() são para transação de banco de dados.

Com isso, nós já temos uma parte das camadas prontas, uma parte da camada Banco de Dados com a classe manipuladora. Separamos o código que geralmente é posto onde você recebe os dados e já conecta e executa tudo. Agora, nós temos um objeto que irá fazer isso, acontecendo também o re-uso de código porque toda aplicação que necessitar interagir com o banco de dados irá usar o objeto BancodeDados.

No próximo artigo mostrarei um pouco mais sobre a camada Banco de Dados e sobre o Data Access Object(DAO).

Abraço!


Comente também

21 Comentários

Julio Cesar Rodrigues da Silva
Julio Cesar Rodrigues da Silva

Parabéns pelo artigo muito bom msm, espero agora pela continuação dele....valeu

Jonas Santiago
Jonas Santiago

Não entendi pra quer usar XML no código? Daria pra me explicar...

Harlley Roberto de Oliveira
Harlley Roberto de Oliveira

Acho q não tem necessidade do XML, percebi que vc quis fazer igual no .net que tem xml porque o código é compilado e o XML pode ser alterado sem a necessidade de recompilar.

Rogério Alves
Rogério Alves

OLÁ SOU ROGÉRIO ALVES E EXPLICAREI O PORQUE DO XML. É PORQUE TEREMOS VÁRIAS TELAS ONDE FAREMOS CHAMADAS AO BANCO DE DADOS E PARA NÃO TERMOS QUE COLOCAR SEMPRE OS MESMOS DADOS, EU FAÇO ISSO EM UM XML. POR QUE IMAGINE VOCÊ MIGRA PARA OUTRO BANCO DE DADOS E TER QUE MUDAR EM TODOS OS ARQUIVO QUE FARÃO USO DO BANCO DE DADOS, SERIA DESPERDÍCIO, NO CASO EU SÓ MUDO OS DADOS NO XML E TODOS OS ARQUIVOS QUE USARÃO A CLASSE BANCO IRÃO USAR OS DADOS DO XML. ASSIM GANHAMOS TEMPO PARA A APLICAÇÃO.

Rodrigo .
Rodrigo .

estavamos precisando realmente de uma pessoa que postasse um artigo aproveitável no dia a dia...

XML??! totalmente compreensível... vários fatores, ex: REUSO, várias conecções com o banco, organização de dados...

pelo que vi é sua primeira materia, correto? seja muito bem vindo com suas contribuições!

abraço

Flavio Silveira Pepino
Flavio Silveira Pepino

Cara, estava precisando de um artigo como esse!!!!!Valeu! ABraço

Mauro Willian Damas Moreira Fernandes dos Santos
Mauro Willian Damas Moreira Fernandes dos Santos

Por enquanto, pelo o que pude ver, o artigo está bom. Estou esperando a continuação, ok?

Dica: Por que não usa algum "framework" para faezr persistência de dados. Algo como o Hibernate (Java). Eu utilizo o Lumine (http://www.hufersil.com.br/lumine/enduser/) e ele, até agora, tem aguentado o "tranco"...rs

Wescley Costa
Wescley Costa

To esperando a continuação...

Rogério Alves
Rogério Alves

OLHA A "ARQUITETURA" É EXATAMENTE PRA ISSO, VC PODE COLOCAR LA AS FRAMEWORKS, OUTRAS CLASSES UTILITARIAS, PARA FACILITAR O REUSO, EU POSTEI ESSA CLASSE MANIPULADORA PARA ENTRAR MAIS NA PARTE DE CONSTRUÇÃO, QUE TBM PODE SER MODIFICADA, A IDÉIA É ENCHER É A ARQUITETURA SER UMA BIBLIOTECA DE UTILITÁRIOS QUE POSSAM SER ACESSADOS POR TODOS OS SISTEMA DA FÁBRICA.

Eduardo Sganzerla
Eduardo Sganzerla

Parabens!

Mas quanto ao XML... sim é util, mas não existe o problema de alguém conseguir o endereço desse xml e pegar ali os usuarios, senhas do banco... e zuar total com o db?
Valeu

Danielle Caovila
Danielle Caovila

Parabéns pelo artigo, mas também é possivel chamar os dados referente ao banco, usuario etc.. de um outro arquivo php, não seria melhor?
eu não entendo mto bem de xml.. mas enfim estou esperando pelas próximas matérias!!

Rogério Alves
Rogério Alves

SIM VC PODE MUDAR A CLASSE DO MODO QUE VC ACHAR MELHOR, PODE COLOCAR EM UM ARQUIVO PHP AS VARIAVEIS DE CONEXAO

Keyne Viana Silva
Keyne Viana Silva

Begin, Commit e RollBack?

Pode me dar um exemplo de uso?

Rogério Rodrigues
Rogério Rodrigues

POR EXEMPLO, SE VOCE VAI INSERIR DADOS EM MAIS DE UMA TABELA, SE DER NA ULTIMA TABELA QUE É IMPORTANTE VOCE PODE ABORTAR O PROCESSO DANDO O ROLLBLACK, AI OS DADOS GRAVADOS ANTES NAO SAO SALVOS. BEGIN INICIA, COMMIT TERMINA COM SUCESSO, E ROLLBACK DESFAZ O QUE VOCE HAVIA FEITO

Newton Gonzaga Costa
Newton Gonzaga Costa

Gente, axei mto massa essa matéria em todos os capítulos. Mas tenho um probleminha q precisava q vcs me ajudassem, eu não sei trabalhar com xml em php. Alguém pode me passar um tuta massa ???

Obrigado !!!

Marco Antonio da Silva Francisco
Marco Antonio da Silva Francisco

Desculpe a ignorância, é que sou novato em PHP, já estudei algumas apostilas, mas eu gostaria de saber se essa class precisa do <?php e no final ?> ?
Abraço

César  Ataide
César Ataide

Boa tarde !!!!!
Rogerio muito boa a sua matéria

Duvidas: $banco = new BancodeDados("../../../sistema/siscliente/conexao.xml");
este aruivo conexao.xml ?????? não exite neste caminho eu tenho que criar um.

$banco = new BancodeDados("../../../sistema/siscliente/conexao.xml");

César  Ataide
César Ataide

Bom dia!!!!!!!

Cara por onde tu andas espero que esteja vivinho e de continuidade nesta linha de raciocínio

O artigo é sensacional : Construindo uma Arquitetura de Desenvolvimento em PHP 5



Rogério gostaria receber o projeto completo, pois eu não consegui achar o maldito do caminho $banco = new BancodeDados("../../../sistema/siscliente/conexao.xml"); ou melhor o arquivo conexao.xml ele existe mesmo ou terei que criar um.


César  Ataide
César Ataide

Bom dia!!!!!!!

Cara por onde tu andas espero que esteja vivinho e de continuidade nesta linha de raciocínio

O artigo é sensacional : Construindo uma Arquitetura de Desenvolvimento em PHP 5



Rogério gostaria receber o projeto completo, pois eu não consegui achar o maldito do caminho $banco = new BancodeDados("../../../sistema/siscliente/conexao.xml"); ou melhor o arquivo conexao.xml ele existe mesmo ou terei que criar um.


Julian cambraia
Julian cambraia

Caro Rogério Rodrigues, estive dando uma olhada no projeto desenvolvido por você no site da imaster e gostaria de lhe pedir uma cópia. Tem como?

Jonathan Fernando
Jonathan Fernando

Parabéns pelo seu artigo. Realmente muito bom!
E parabéns pela iniciativa de contribuir com seu conhecimento. Obrigado!

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize