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