Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/09/2007, 16:55
zaqpz
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Consulta sobre el diseño de unas clases

Hola gente, estoy intentando diseñar una aplicación lo mas orientada a objetos que me sea posible y me ha surgido una consulta.
Las clases en cuestión deberían servir para ingresar, consultar, obtener, etc. operaciones en la cuenta corriente de un cliente. Lo que tengo por ahora es mas o menos así:

Código PHP:
<?php
class ModelOperations
{
    protected 
$dbTable='operations';
    protected 
$dbHandler;
    
    public function 
__construct()
    {
        
$this->dbHandler=DataAccess::GetInstance();    
    }
}

class 
Operation extends ModelOperations
{
    private 
$id;
    private 
$description;
    private 
$amount;
    private 
$date;
    private 
$user;
    
    public function 
__construct()
    {
        
parent::__construct();
    }
    
    public function 
Save()
    {
        if(!
$this->dbHandler->Query("INSERT INTO $this->dbTable (description, amount, date, user) VALUES ('$this->description', '$this->amount', '$this->date', $this->user)")) throw new Exception('No se puede guardar la operación');
    }
    
    public function 
Update()
    {
        
// Codigo para actualizar
    
}
    
    public function 
Erase()
    {
        
// Codigo para borrar
    
}
    
    
/* Setters */
    
public function SetDescription($description)
    {
        
$this->description=$description;
    }
    
    
// ...
    
    /* Getters */
    
public function GetDescription()
    {
        return 
$this->description;
    }

    
//...

class Operations extends ModelOperations
{
    private 
$operations;
    
    public function 
__construct()
    {
        
parent::__construct();
    }
    
    public function 
SearchByUserID($id)
    {
        if(!
$result=$this->dbHandler->Query("SELECT id, description, amount, date, user FROM $this->dbTable WHERE user='$id'")) throw new Exception('No se puede realizar la búsqueda de operaciones');
        
        while(
$registry=$this->dbHandler->GetRegistry($result))
        {
            
$operation=new Operation();
            
$operation->SetID($registry['id']);
            
$operation->SetDescription($registry['description']);
            
$operation->SetAmount($registry['amount']);
            
$operation->SetDate($registry['date']);
            
$operation->SetUser($registry['user']);
            
            
$this->operations[]=$operation;
        }
        return 
$this->operations;
    }
}
?>
Me surgen esta duda/problema:
Desde el controlador en algún momento voy a necesitar añadir una nueva operación pero... ¿cómo lo debería hacer?
Podría crear una instancia del objeto Operation (sin s), usar los setters y llamar a Save, pero me parece que no sería correcto, sino que debería trabajar con el objeto Operations. Entonces podría crear un método Add en Operations que se encargue de crear instancias de Operation, setear los atributos y llamar a Save(), pero en este caso ¿cómo manejo las excepciones lanzadas por Operation para informárselas al controlador y que este las muestre como crea necesario?

En resumen, ¿cómo añado desde el controlador una nueva operación?; ¿con qué objeto debería trabajar para dicha tarea? y ¿como manejo las excepciones arrojadas?

Les agradezco por su paciencia y ayuda,
Gracias, saludos.

PD: si el diseño no es correcto sus sugerencias serán muy bienvenidas
__________________
R4DS en español | R4DS en inglés