在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