Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/03/2011, 14:56
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Zend - MVC - Duda Persistencia / Modelo

A mi parecer la opción más limpia es la 2, aunque te recomendaría usar un DataMapper

¿Que es un Data Mapper?

Precisamente es una capa entre el controlador y tu capa de persistencia, a la que le alimentas objetos y te regresa objetos, es la opción más limpia a mi parecer y así no expones código de tu capa de persistencia al controlador y esta, esta totalmente contenida.

Lo ideal en este caso es que crees un objeto en tu controlador (no importa el input ya sea un request, etc.) Y pases este objeto a tu capa, que se encarga de llamar a la persistencia y salvar el objeto (esto hace que puedas implementar cualquier ORM de una forma más sencilla).

Un ejemplo:
Código PHP:
Ver original
  1. public function fooAction()
  2. {
  3.        $aPostData = $this->getRequest()->getPost();
  4.        $Producto = new Model_Producto();
  5.        $Producto->setTitle($aPostData['title'])
  6.                        ->setDescription($aPostData['description']);
  7.  
  8.        $ProductoMapper = new Application_Model_Mapper_Productos();
  9.        $ProductoMapper->saveProducto($Producto);
  10. }

Mapper:
Código PHP:
Ver original
  1. public function saveProducto(Model_Producto $Producto)
  2. {
  3.          $DbTable = new Application_Model_DbTable_Producto();
  4.          $aData = array(
  5.                  'title' => $Producto->getTitle(),
  6.                  'description' => $Producto->getDescription()
  7.          );
  8.  
  9.          $DbTable->insert($aData);
  10. }

Puede parecer más código (y lo es) pero depende mucho como abstraigas, igual puedes crear un Base_Model, Factory, etc. La idea es abstraer el paso de datos entre tu controller y tu capa ORM.

Saludos.