我仍然在努力掌握依赖注入和松耦合对象。查看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框架是紧密耦合的。恰恰相反,它们吹嘘自己的耦合非常松散。有人说情人眼里出西施。有一些耦合,但它仍然是一个很好的框架。