+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 (~16 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 (~16 anos atrás)

Novo Comentário:

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