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
(~17 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. ;)