In the Zend Framework Quickstart, there has been a change from models that extend Zend_Db_Table_Abstract
to the Table Data Gateway pattern.
Personally, I have not had much experience with this pattern and I keep hearing this should most likely be used instead of the old way.
A short example from the quickstart:
Old way:
class Default_Model_Guestbook extends Zend_Db_Table_Abstract
{
protected $_name = 'tablename';
// do stuff
}
New way:
// 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();
}
From my lacking experience with this style of programming, I find it hard to grasp the actual benefits from this latter way; I understand that this method seperates the database from the actual logic as much as possible, which should in theory make a transition to another database platform easier. However, I really don't see this happening on any project I am working.
There is almost no doubt that I am overlooking something, so I'd love to hear your advice.
The question:
Could someone please explain to me why (or if) the latter is better practice?
Should I switch from the old way to the new way or are there still proper reasons for sticking with models that represent database tables?
Thanks in advance.