+2

Mapeamento Objeto-Relacional da Teoria à Prática

criado por Diego Botelho Martins em 29/07/2007 3:37pm
class.Categoria.php

<?php
class CategoriaException extends Exception { }

/**
 * Classe responsável pelo gerenciamento das informações de uma categoria
 *
 * @package MeuSistema
 * @subpackage Categorias
 * @author Diego Botelho <contato@diegobotelho.com>
 * @link http://www.diegobotelho.com
 * @date 2007-01-30 21:07:00
 */
class Categoria
{
   /**
    * @var int
    * @access private
    */
    private $cat_id;
      
   /**
    *
    * @var string
    * @access private
    */
    private $cat_nome;
      
//----------------------------------------------------------------------      
    
   /**
    * Seta o valor do atributo $cat_id
    * @param int $intId
    * @access public
    */
    public function setId($intId)
    {
        $this->cat_id = $intId;
    }
      
   /**
    * Obtém o valor do atributo $cat_id
    * @access public
    */
    public function getId()
    {
        return $this->cat_id;
    }
      
   /**
    * Seta o valor do atributo $cat_nome
    * @param int $strId
    * @access public
    */
    public function setNome($strNome)
    {
        $this->cat_nome = $strNome;
    }
      
   /**
    * Obtém o valor do atributo $cat_nome
    * @access public
    */
    public function getNome()
    {
        return $this->cat_nome;
    }  
    
//----------------------------------------------------------------------      
    
   /**
    * Construtor da classe 
    * @access public
    */
    public function __construct()
    {
        $this->setId("");
        $this->setNome("");
    }
      
   /**
    * Destrutor da classe 
    * @access public
    */
    public function __destruct() { }
      
   /**
    *
    * Cadastra um nova categoria
    * @access public
    */
    public function cadastrar()
    {
        try {
            DaoCategoria::insert($this);
        } catch(Exception $e) {
            throw new CategoriaException($e->getMessage());
        }
    }
      
   /**
    * Altera uma categoria existente
    * @access public
    */
    public function alterar()
    {
        try {
            DaoCategoria::update($this);
        } catch(Exception $e) {
            throw new CategoriaException($e->getMessage());
        }
    }

   /**
    * Exclui uma categoria existente
    * @access public
    */
    public function excluir()
    {
        try {
            DaoCategoria::delete($this);
        } catch(Exception $e) {
            throw new CategoriaException($e->getMessage());
        }
    }

   /**
    * Recupera uma categoria armazenado em meio persistente
    * @access public
    */
    public function carregar()
    {
        try {
            DaoCategoria::load($this);
        } catch(Exception $e) {
            throw new CategoriaException($e->getMessage());
        }    
    }
      
   /**
    * Retorna uma lista com as categorias cadastradas
    * @access public
    */
    public function listar()
    {
        try {
            return DaoCategoria::collection($this);
        } catch(Exception $e) {
            throw new CategoriaException($e->getMessage());
        }
    }
}
?>

Bom é isso, apesar de ser bem superficial, espero que tenha ajudado.
Quero dizer que você deve ler mais sobre este assunto pois é realmente muito importante e útil.

Vale a pena programar em PHP5!

Um abraço!

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.)