Nel Zend Framework Quickstart, è stato modificato il modello che estende Zend_Db_Table_Abstract
nel modello di Gateway dati tabella.Zend Framework Gateway dati tabella in stile ORM rispetto all'estensione Zend_Db_Table_Abstract
Personalmente, non ho avuto molta esperienza con questo modello e continuo a sentirlo che molto probabilmente dovrebbe essere usato al posto del vecchio modo.
Un breve esempio dal QuickStart:
Vecchio modo:
class Default_Model_Guestbook extends Zend_Db_Table_Abstract
{
protected $_name = 'tablename';
// do stuff
}
Nuovo modo:
// The actual model
class Default_Model_Guestbook
{
protected $_comment;
protected $_created;
protected $_poster;
// list continues with all columns
}
// Dbtable for this model
class Default_Model_DbTable_Guestbook extends Zend_Db_Table_Abstract
{
/** Table name */
protected $_name = 'guestbook';
}
// Mapper
class Default_Model_GuestbookMapper
{
public function save($model);
public function find($id, $model);
public function fetchAll();
}
Dalla mia esperienza manca con questo stile di programmazione , Trovo difficile afferrare l'actua traggo beneficio da quest'ultimo modo; Comprendo che questo metodo separa il più possibile il database dalla logica effettiva, che in teoria dovrebbe facilitare la transizione a un'altra piattaforma di database. Tuttavia, davvero non vedo che questo accada su nessun progetto che sto lavorando.
Non c'è quasi dubbio che sto trascurando qualcosa, quindi mi piacerebbe sentire i vostri consigli.
La domanda:
Qualcuno potrebbe spiegare a me perché (o se) il secondo è meglio pratica?
dovrei passare dal vecchio modo di nuovo modo o ci sono ancora ragioni legittime per attaccare con modelli che rappresentano le tabelle del database?
Grazie in anticipo.
Non proprio una risposta, quindi è lei. Dopo diversi anni ho scoperto che l'astrazione è una forma d'arte, l'arte non ha sempre ragioni. Oggi astratto il minimo di cui ho bisogno e faccio cose quindi dovrò programmare il meno possibile, cosa che nel tuo caso, se aggiungi questo ulteriore livello di astrazione, non accadrà. –
Giusto per chiarire, Zend_Db_Table * è * un'implementazione del modello TDG/RDG. Quello che sta succedendo è che si stanno spostando verso un patter di Data Mapper. – jason