Zend Framework Quick Start是否包含耦合对象


Zend Framework Quick Start does it contain coupled objects?

我仍然在努力掌握依赖注入和松耦合对象。查看Zend框架快速入门,我注意到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推荐紧耦合对象?

我猜大多数会点击快速入门指南的人可能最多是新手。引入数据库抽象层可能会让新手感到有些困惑,添加另一个复杂性(如依赖注入)可能有点难以接受。特别是对于那些刚接触OOP的人。

此外,Zend_Db_Table的使用是Zend Framework社区中最常见的DAL类型。也就是说,可以安全地假设(对他们来说)大多数人几乎期望 DbTable在快速入门示例中使用,因为这是每个人都想知道如何做的。


然而,这并不意味着Zend框架是紧密耦合的。恰恰相反,它们吹嘘自己的耦合非常松散。有人说情人眼里出西施。有一些耦合,但它仍然是一个很好的框架。