Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Uélio Nobre

POO - Classe para conexao com banco de dados - Avaliação

Recommended Posts

Pessoal, pela resposta dada a minha ultima pergunta, fiz uma outra classe.

Ela conecta com a base, seleciona o banco, e desconecta.

 

vou postar para vocês avaliarem.

 

<?

/*

CLASSE PARA CONEXAO COM BANDO DE DADOS

Criado por: Fransuelio Nobre Frazão - Uélio Nobre

Email: uelionobre@hotmail.com

Em: sexta-feira, 15:42 - 28 de novembro de 2008.

*/

 

class ConectarBancoDados {

 

// variaveis atributos

private $host, $user, $pass, $base;

// variaveis para metodos

private $conectaDb, $conectaBase, $desconectaDb;

 

 

function __construct() {

$this->host = "localhost";

$this->user = "root";

$this->pass = "uelioasdf";

$this->base = "test";

}

 

// metodo para conexao com o banco

function conectarBanco() {

$this->conectaDb = mysql_connect($this->host, $this->user, $this->pass) or die("Erro na linha 28</p>" . mysql_error());

return $this->conectaDb;

}

 

 

// metodo para selecionar a base

function selecionaBase() {

$this->conectaBase = mysql_select_db($this->base);

return $this->conectaBase;

}

 

 

// metado para fechar conexao

function desconectarBanco() {

$this->desconectaDb = mysql_close($this->conectaDb);

return $this->desconectaDb;

}

}

 

// chamando a classe de conexao

$conectar = new ConectarBancoDados();

$conectar->conectarBanco();

$conectar->selecionaBase();

 

//

// faça o que quiser com seu banco de dados!!!!

//

 

$conectar->desconectarBanco();

?>

 

Programação orientado a objeto é muito melhor.

Só dando os primeiros passos para saber.

Ela funciona direitinho, mas quero que voces me digam se usei alguma coisa errado ai?

 

Abraços a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara...ficaria melhor se colocasse abstração de banco de dados (dbx, PDO [recomendada nesse caso],etc).

Também ficaria melhor se você fizesse uma classe destinada a conexão,e uma factory da conexão.

A classe da conexão,é legal você ou colocar os setters e no construtor chamar (ai se o cara conectar,quiser usar o mesmo objeto pra outra operação,em outro banco de dados ou outro usuário,só chamar o setter do parâmetro que quer mudar).

Usa abstração que já ta de bom começo!

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala, garoto!

 

Seguinte:

 

Pense um pouco além da classe de conexão, pense numa classe de acesso completo ao banco de dados. Neste contexto, quais são as caracteristícas básicas que uma classe de acesso deve ter?

Bom, basicamente as seguintes:

Conectar ao banco

Desconectar do banco

Executar comandos

Começar uma transação

Caso ocorra algum erro na transação, executar ROLLBACK

Caso dê tude certo, executar COMMIT

Bom, claro que são requisitos básicos, mas para o nosso propósito servirá.

Como esses itens são o básico para uma classe ser considerada como uma classe de acesso ( Vamos chamar de connector, aqui ok? ), poderíamos obrigar quaisquer classes que quisessem ser um conector a oferecer estes recursos. Como faremos isso? Com interfaces.

 

No nosso caso, ficaria algo mais ou menos assim:

interface Connector
{
	public function connect($dsn);
	public function execute($query);
	public function fetch($query);
	public function startTransaction();
	public function commit();
	public function rollback();
	public function disconnect();
}

Explicando:

$dsn: Seria um identificador contendo os dados para acesso ao banco. Um bom exemplo,seria: mysql://password@localhost/banco ( Modelo PEAR_DB).

Eu adicionei o método fetch, que chamaria ó método execute e traria os resultados em forma de array, iterator, objetos, etc...

 

Bom, e quanto a sua classe? http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Ficaria assim:

 

class MysqlConnector implements Connector
{
	private $id = NULL;// Id da conexão.

	public function connect($dsn)
	{
		 /*implementação. Aqui seria usado um explode no argumento $dsn, para conseguir se conectar ao banco, 
									selecionar os dados e setar o atributo $id.	   */
	}

	public function execute($query)
	{
		//executaria um mysql_query.
	}

	public function fetch($query)
	{
		//Chamaria o método execute e retornaria os dados da forma escolhida.
	}

	public function startTransaction()
	{
		//Inicializa transação no banco, provavelmente com $this->execute('START TRANSACTION');
	}

	public function commit()
	{
		//Confirmaria as operações da transação, provavelmente com $this->execute('COMMIT');
	}

	public function rollback()
	{
		//Cancelaria as operações da transação, provavelmente com $this->execute('ROLLBACK');
	}

	public function disconnect()
	{
		//Rodaria um mysql_close($this->id) com as devidas verificações necessárias
	}

}

 

Veja bem, a vantagem aqui, é que você poderia ter outros conectores, tais como PostgresqlConnector, SqliteConnector, SqlServerConnector, etc. E todos implementariam a interface Connector.

 

Você também poderia utilizar uma SIMPLE FACTORY, que criaria os objetos para você. Algo como:

class ConnectorsFactory
{
	public function get($connector)
	{
		switch ($connector) {
			case "Mysql":
				return new MysqlConnector();
				break;
			case "Postgresql":
				return new PostgresqlConnector();
				break;
			// ...
		}
	}
}

A forma acima, é só uma abordagem, você poderia utilizar diversos patterns, tais como Abstract Factory, Factory Method, Singleton, Query Object, etc. Além disso, outros métodos, tais como affectedRows e numRows seriam bem-vindos.

 

Você também, poderia utilizar PDO.

 

Cara, me desculpe pelo textão, mas é que eu estou estudando justamente toda essa parte de abstração para o framework ORM que estou desenvolvendo.

 

Seguem alguns links que podem te ajudar:

PDO: http://www.php.net/pdo

Patterns:

Patterns for PHP: http://patternsforphp.org/index.php?title=Pattern_List

PHP Patterns: http://www.phppatterns.com/docs/?idx=design

 

Abraços!

 

Paul George

Compartilhar este post


Link para o post
Compartilhar em outros sites

A proust e Aleph Web.

 

Sou autodidata e ontem comecei a programar orientado a objeto, não é meu proposito fazer propraganda, porque eu comprei um livro chamado "Entendendo e Dominando o PHP - Digerati Books", e com base no que li até no capitulo 2, fiz com os meus fundamentos e a minha compreensão sobre o texto, essa classe. Le sobre herança, mais ainda não tive tempo para estudar como utilizar. Ainda não cheguei em METODOS E PROPRIEDADES ABSTRATAS, CLASSES ABSTRATAS, INTERFACES E CLONES.

 

Ainda não fiz teste com herança, porque ainda não fiz uma classe que precisasse. Mas vou fazer utiliza-la quando o meu conceito sobre classe(Mãe) estiver de boa compreensão.

 

O livro não passa exercicios, então tive que tentar fazer uma classe simples que funcionasse.

O que veio em mente foi a de conexao com o BD.

 

Ontem dei mais uma lida e pensei justamente isso, em executar querys com a classe conexao. Vi como se usa constantes em classes e vou tentar usar pelo menos no nome do servidor.

 

 

Pra mim que estou cheirando a leite sobre o assunto esta pesando um pouco.

Mas pra quem começou ontem, acho que a classe esta de bom tamanho. Falta exercitar.

 

Obrigado pessoal, depois comentamos mais sobre POO, vou estudar um pouco mais.

E sim, uma coisa que eu reparei aqui é que POO muita pouca gente sabe, ou procura entender. Principalmente com PHP.

Abraços a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha dica basica é mude mysql para mysqli, ja que estav usando PHP5, nao tem sentido mais usar funções obsoletas

 

mas use mysqli do jeito certo tbm, nao use mais mysql_select_db, nem mysqli_select_db

 

outra coisa só há necessidade de usar transaction se voce for manipular varios registros ao mesmo tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.