+2

Mapeamento Objeto-Relacional da Teoria à Prática

criado por Diego Botelho Martins em 29/07/2007 3:37pm
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());
       
}
   
}
}
?>

Comentários:

Mostrando 1 - 2 de 2 comentários
Muito bom Diego! Legal ver que a galera do PHP está antenada com relação a orientação a objetos.

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. ;)
31/07/2007 3:49am (~18 anos atrás)

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.
30/07/2007 9:11am (~18 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)