我仍然试图掌握依赖注入和松散耦合的对象。查看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推荐紧密耦合的对象?
答案 0 :(得分:0)
我最好的猜测是,大多数甚至会点击快速启动指南的人最多也可能是新手。引入Database Abstraction Layer对于新手来说可能有些混乱,但是添加另一个复杂性(例如依赖注入)可能有点太难以接受。特别是那些刚接触OOP的人。
此外,Zend_Db_Table
的使用是[需要引用] Zend Framework社区中最常见的DAL类型。也就是说,可以安全地假设(对他们而言)大多数人几乎都希望 DbTable能够在快速启动示例中使用,因为这是每个人都想知道如何做的事情。
然而,这并不意味着Zend Framework紧密耦合。恰恰相反,他们夸耀自己很松散。有人说这是旁观者的眼睛。有一些耦合,但它仍然是一个很好的框架。