Mapeamento Objeto-Relacional da Teoria à Prática
class.Cliente.php:
<?php
class ClienteException extends Exception { }
/**
* Classe responsável pelo gerenciamento das informações de um cliente
*
* @package MeuSistema
* @subpackage Clientes
* @author Diego Botelho <contato@diegobotelho.com>
* @link http://www.diegobotelho.com
* @date 2007-01-30 21:07:00
*/
class Cliente
{
/**
* @var int
* @access private
*/
private $cli_id;
/**
*
* @var int
* @access private
*/
private $cli_idCategoria;
/**
* @var object
* @access private
*/
private $objIdCategoria;
/**
* @var string
* @access private
*/
private $cli_nome;
/**
* @var string
* @access private
*/
private $cli_cpf;
/**
* @var string
* @access private
*/
private $cli_email;
//----------------------------------------------------------------------
/**
* Seta o valor do atributo $cli_id
* @param int $intId
* @access public
*/
public function setId($intId)
{
$this->cli_id = $intId;
}
/**
* Obtém o valor do atributo $cli_id
* @access public
*/
public function getId()
{
return $this->cli_id;
}
//... A mesma coisa para os outros atributos
//----------------------------------------------------------------------
/**
* Construtor da classe
* @access public
*/
public function __construct()
{
$this->setId("");
$this->setIdCategoria("");
$this->setCategoria(new Categoria);
$this->setNome("");
$this->setCpf("");
$this->setEmail("");
}
/**
* Destrutor da classe
* @access public
*/
public function __destruct(){}
/**
* Cadastra um novo cliente
* @access public
*/
public function cadastrar()
{
try {
DaoCliente::insert($this);
} catch(Exception $e) {
throw new ClienteException($e->getMessage());
}
}
/**
* Altera um cliente existente
* @access public
*/
public function alterar()
{
try {
DaoCliente::update($this);
} catch(Exception $e) {
throw new ClienteException($e->getMessage());
}
}
/**
* Exclui um cliente existente
* @access public
*/
public function excluir()
{
try {
DaoCliente::delete($this);
} catch(Exception $e) {
throw new ClienteException($e->getMessage());
}
}
/**
* Recupera um cliente armazenado em meio persistente
* @access public
*/
public function carregar()
{
try {
DaoCliente::load($this);
// Carregando a categoria do cliente
DaoCategoria::setId($this->idCategoria);
DaoCategoria::load($this->objCategoria);
} catch(Exception $e {
throw new ClienteException($e->getMessage());
}
}
}
?>
Diego parabéns pelo artigo, excelente mesmo, são poucos que tem essa mentalidade de OO, muitos não sabem o que é e outros não sabem como implementar, esse seu artigo ficou muito bom, uma unica duvida que eu fiquei é de como q ficaria a implementação desse DAO, já ouvi falar disso mas não pesquisei nada ainda se puder colocar mais um artigo explanando sobre esse assunto acho q seria bem interressante, ou se tiver algum material e puder me enviar fico muito grato.
Parabéns.
Parabéns.
30/07/2007 9:11am
(~18 anos atrás)
Lembrando que o design pattern que você usou é o Active Record (http://www.martinfowler.com/eaaCatalog/activeRecord.html) e o Data Access Object (http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html).
No caso do Active Record, um ponto contra é que as rotinas de persistência estão fortemente acopladas ao objeto, o que pode não ser o cenário ideal para todas as situações. Algumas vezes é melhor separar as rotinas de cadastro, exclusão, seleção e atualização em um objeto separado. ;)