在Zend Framework Quickstart中,从扩展Zend_Db_Table_Abstract
的模型到表格数据网关模式有所变化。Zend Framework ORM样式的表数据网关与扩展Zend_Db_Table_Abstract
就我个人而言,我对这种模式没有太多的经验,我一直听到这个应该最有可能被用来代替旧的方式。
从快速入门的简单例子:
老办法:
class Default_Model_Guestbook extends Zend_Db_Table_Abstract
{
protected $_name = 'tablename';
// do stuff
}
新方法:
// 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();
}
从我用这种编程风格缺乏经验,我发现很难掌握实际情况l受益于后一种方式;我知道这种方法尽可能地将数据库从实际的逻辑中分离出来,这在理论上应该更容易地转换到另一个数据库平台。但是,我真的没有看到这发生在我工作的任何项目上。
几乎毫无疑问,我忽略了一些东西,所以我很乐意听取您的建议。
问题:
可能有人请向我解释为什么(或者),后者是更好的做法?
我应该从旧的方式切换到新的方式或仍然会有适当的理由与代表数据库表款坚持?
在此先感谢。
不是一个真正的答案,所以这是她的。几年后,我发现抽象是一种艺术形式,艺术并不总是有原因的。今天,我抽象出我需要的最低限度,并且做一些事情,这样我就不得不尽可能少地编写代码,在你的情况下,如果增加这个额外的抽象层次,将不会发生。 – 2009-06-30 13:34:28
为了澄清,Zend_Db_Table *是* TDG/RDG模式的实现。发生的是他们正在转向Data Mapper模式。 – jason 2009-06-30 15:31:49