如何在Zend框架中优化模型?

Jer*_*ris 6 php database oop zend-framework

我需要找出在Zend Framework中有效利用模型的最佳实践.

目前,我有类扩展Zend_Db_Table_Abstract,它处理我的查询到每个类的相应表.

当我需要从控制器访问这些表中的5个时,我发现自己创建了每个特定Zend_Db_Table对象的5个新实例.这真的无效.

我已经考虑过实现Factory模式来创建新实例(或提供现有的静态副本),但我不确定.这是最好的方式吗?

处理模型以确保速度而不消耗过多资源的正确方法是什么?懒人装载应该在这里发挥作用吗?

[编辑] 作为一个例子,我有一个类,我用来处理从原始搜索查询获取有关位置的详细信息,并需要这些对象来解析查询:

// Initialize database object
$this->dbLocations = new Model_Locations;
$this->dbStates = new Model_States;
$this->dbZipcodes = new Model_Zipcodes;
$this->dbLookup = new Model_Lookup;
Run Code Online (Sandbox Code Playgroud)

在另一个类中,我可能需要再次访问这些模型,所以我重复上面的代码.基本上重新初始化可能是静态/单例的对象.

Roc*_*ord 3

我倾向于像您一样在 DbTable 工作。当我需要在一个操作中查询多个表以在 dbTable 之上创建另一层模型时,我发现它非常有效。类似于服务或领域层。这样我只需要调用一个模型,但我仍然拥有我需要的功能。\n

\n\n

这是一个简单的示例,最终可能与 5 个 DbTable 类交互,并且很可能还有几个 Row 类:

\n\n
<?php\n\nclass Application_Model_TrackInfo\n{\n\n\n    protected $_track;\n    protected $_bidLocation;\n    protected $_weekend;\n    protected $_shift;\n    protected $_station;\n\n    public function __construct() {\n        //assign DbTable models to properties for convience\n        $this->_track = new Application_Model_DbTable_Track();\n\n    }\n\n    /**\n     *\n     * @param type $trackId\n     * @return type object\n     */\n    public function getByTrackId($trackId) {\n\n        $trackData = $this->_track->fetchRow($trackId);\n        //getAllInfo() Application_Model_Row_TRack\n        $result = $trackData->getAllInfo();\n        //returns std object reflecting data from 3 DbTable classes\n        return $result;\n    }\n\n    /**\n     *Get Station from trackid through bidlocationid\n     *\n     * @param type $trackId\n     * @return type object\n     */\n    public function getStation($trackId){\n\n        $data = $this->_track->fetchRow($trackId);\n        //This a Application_Model_Row_Track method\n        $result= $data->getStationFromBidLocation();\n\n        return $result;\n    }\n\n} \n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望这有帮助。

\n\n

[编辑] \n自从我写了这个答案以来,我已经了解了域模型和数据映射器的好处。哇,我的应用程序有多么不同。这不是灵丹妙药,但却是一个巨大的进步。
\n感谢PHPMaster.com
的 Alejandro Gervasio \ nAkrabat.com的 Rob Allen \n和Surviving The Deepend 的P\xc3\xa1draic Brady


\n\n

感谢他们为理解这种模式提供的所有帮助。

\n