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;
}
}
?>
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