Zend框架ORM风格的表数据网关与延伸Zend_Db_Table_Abstract(Zend Fr

2019-07-29 11:01发布

在Zend框架快速入门 ,出现了从扩展模式的改变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();
}

从我缺乏这种风格的编程经验,我觉得很难把握,从后者的方式获得的实际利益; 据我所知,这种方法的方式隔开从实际的逻辑尽可能,理论上应该让到另一个数据库平台的转换更容易数据库。 可是,我真的没有看到我工作的任何项目发生这种情况。

这里几乎是我忽视的东西毫无疑问,所以我很想听听你的建议。

问题:

  • 可能有人请给我为什么(或者),后者是更好的做法解释?

  • 我应该从旧的方式切换到新的方式或仍然会有适当的理由与代表数据库表款坚持?

提前致谢。

Answer 1:

这是我在为什么这是一个更好的做法的解释:

我认为真正的好处,这是无缝地改变你的数据源的能力。 通过将抽象的附加层到应用程序中,你的模型不再代表一个数据库表(它不应该有,在我看来)作为模型应该是数据的表示(而不是网关的话)。 数据库访问层应该由模型封装,让您更多的灵活性。

说,例如,你的应用需要开始使用SOAP服务或XML-RPC,因为它的数据源/存储。 通过使用数据映射方法,你是在一个明显的优势,因为你已经在地方加入这些具体的数据层接口必要的结构没有太多的(如果有的话)与您现有车型的干扰。

如果你这样做,虽然? 这是一个务实的问题。 就个人而言,我喜欢记住,我开发的东西是灵活的,如下(同意)的最佳实践的和平。 但是,只有你自己知道是否创建一个更灵活的应用会让你更容易的项目,无论是现在还是在未来的一段时间,建立和维护。

对于我来说,我只是想,我要建的东西的感觉,我认为是最好的做法,往往支付股息。



Answer 2:

这是有用的,因为你可以做$insert = new Model_Guestbook($param1, $param2, $param3); - 是指当有人谈到项目,他可以轻松地创建一个新的实例,无需数据库结构的知识(通过检查源/通过模型接口)。 这仅仅是这种方法提供的好处之一:)



文章来源: Zend Framework ORM-style table data gateway vs. extending Zend_Db_Table_Abstract