数据映射器和zend框架

我在我的Zend Framework Web应用程序中实现了Data Mapper设计模式,并且一切都很顺利,我非常喜欢在Zend中使用数据映射器,而不是仅应用Row Gateway模式,但是我的架构存在问题。 我不确定如何使用我的数据映射器以OOP方式引用和处理外键约束。 所以我有我的Model类,我的DbTable类和我的Mapper类。 我应该将所有外键关系放在我的DbTable类中,这样我可以使用findDependentRowset()函数在映射器中检索,或者更好的方法是在映射器中实例化依赖类。 使用Data Mapper模式映射外键的最佳OOP练习是什么?


我会去找DataMapper,因为其他两个人都不需要知道ID本身,尽管关系调用者总是需要这个ID。

Model
- Property accessors and private property data holders
- Functions regarding correct usage of model
- Relatioship callers (calls relationship fetches in the DbTable to get parents or children rows)or returns cached data

DbTable
- Provides all static functions used to query data and instanciate the related Models such as :getById, getByName, getByComplexSearch, etc
- Provides all static relationship loaders such as: getParents, getChildrens and any other version you need

DataMapper
- Does the real meat and provides the getObjects method which accepts either a query part or a full query and loads the data into the ModelObjects and reads it back into a update, insert, delete query when needed
- Datamapper should be in charge of checking for relationship faults when inserting, updating or deleting using transactions if in InnoDB.

这有任何意义吗?


findDependentRowset在我的系统上有findDependentRowset 。 但现在不行了! 在大多数情况下,这是浪费资源。 表连接应该在你的SQL语句上。

在这里看到我的答案:手工查询vs findDependentRowset

我还远离使用Doctrine或Propel(我从来不需要它)。 也许有一天。 (现在使用Doctrine 2 ,所以...现在我建议你一样)


老解答

在与Zend Framework合作几年之后,我遇到了以下架构:

1)我有一个抽象映射器,这是我所有的映射器扩展的: Zf_Model_DbTable_Mapper

2)我也有一个抽象模型(域对象),类似于行数据网关,但它不是网关。 这是一个通用的域对象: Zf_Model

3)当填充对象图(SQL连接)时,一个映射器委托给负责给定对象的其他映射器。

该方法来自抽象映射器:

    public function getById($id) 
    {


        $tableGateway = $this->getTable();

        $row = $tableGateway->fetchRow('id =' . (int) $id);

        if (!$row) 
            retur null;

        $row = $row->toArray();

        $objectName = $this->getDomainObjectName();
        $object = new $objectName($row['id']);
        $object->populate($row);

        return $object;    
    }
链接地址: http://www.djcxy.com/p/56287.html

上一篇: Data mapper and zend framework

下一篇: OK for Data Mapper to call another? And to inherit?