Zend Framework快速入门是否包含耦合对象?

时间:2011-12-11 20:12:24

标签: php zend-framework dependency-injection loose-coupling

我仍然试图掌握依赖注入和松散耦合的对象。查看Zend Framework Quick Start,我注意到Application_Model_GuestbookMapper中有以下方法:

public function setDbTable($dbTable)
{
    if (is_string($dbTable)) {
        $dbTable = new $dbTable();
    }
    if (!$dbTable instanceof Zend_Db_Table_Abstract) {
        throw new Exception('Invalid table data gateway provided');
    }
    $this->_dbTable = $dbTable;
    return $this;
}

public function getDbTable()
{
    if (null === $this->_dbTable) {
        $this->setDbTable('Application_Model_DbTable_Guestbook');
    }
    return $this->_dbTable;
}

我的问题是:这是紧耦合的一个例子吗,因为Mapper取决于DbTable?如果是使用依赖注入,那么控制器中会出现类似的情况吗?:

$guestbookMapper = Application_Model_GuestbookMapper;
$guestbookMapper->setDbTableGuestbook(new Application_Model_DbTable_Guestbook);

如果是这样,为什么Zend推荐紧密耦合的对象?

1 个答案:

答案 0 :(得分:0)

我最好的猜测是,大多数甚至会点击快速启动指南的人最多也可能是新手。引入Database Abstraction Layer对于新手来说可能有些混乱,但是添加另一个复杂性(例如依赖注入)可能有点太难以接受。特别是那些刚接触OOP的人。

此外,Zend_Db_Table的使用是[需要引用] Zend Framework社区中最常见的DAL类型。也就是说,可以安全地假设(对他们而言)大多数人几乎都希望 DbTable能够在快速启动示例中使用,因为这是每个人都想知道如何做的事情。


然而,这并不意味着Zend Framework紧密耦合。恰恰相反,他们夸耀自己很松散。有人说这是旁观者的眼睛。有一些耦合,但它仍然是一个很好的框架。