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)
在另一个类中,我可能需要再次访问这些模型,所以我重复上面的代码.基本上重新初始化可能是静态/单例的对象.
我倾向于像您一样在 DbTable 工作。当我需要在一个操作中查询多个表以在 dbTable 之上创建另一层模型时,我发现它非常有效。类似于服务或领域层。这样我只需要调用一个模型,但我仍然拥有我需要的功能。\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感谢PHPMaster.com
的 Alejandro Gervasio \ nAkrabat.com的 Rob Allen \n和Surviving The Deepend 的P\xc3\xa1draic Brady
感谢他们为理解这种模式提供的所有帮助。
\n