【发布时间】:2012-02-21 15:43:53
【问题描述】:
我需要找出在 Zend Framework 中有效利用模型的最佳实践。
目前,我有扩展 Zend_Db_Table_Abstract 的类,它们处理我对每个类各自表的查询。
当我需要从控制器访问其中的 5 个表时,我发现自己为每个特定的 Zend_Db_Table 对象创建了 5 个新实例。这真是无效。
我考虑过实现工厂模式来创建新实例(或提供现有的静态副本),但不确定。这是最好的方法吗?
在不消耗过多资源的情况下处理模型的正确方法是什么?延迟加载应该在这里发挥作用吗?
[编辑] 例如,我有一个类用于处理从原始搜索查询中获取有关位置的详细信息,并且需要这些对象来解析查询:
// Initialize database object
$this->dbLocations = new Model_Locations;
$this->dbStates = new Model_States;
$this->dbZipcodes = new Model_Zipcodes;
$this->dbLookup = new Model_Lookup;
在另一个类中,我可能需要再次访问这些模型,所以我重复上面的代码。本质上是重新初始化可能为静态/单例的对象。
【问题讨论】:
-
你的问题是相当的工资,你能展示一个代码示例,你实际上创建了 5 个表类的实例并描述你需要它们做什么。
-
我理解您的担忧,但并没有真正关注。我会说,在 OOP 中创建一个类的多个实例,尤其是一个抽象类是一件既定的事情。质疑这个表模型对我来说有点像质疑 OOP 或继承。
-
在基本层面上,这种方法的使用是可以接受的。我有一个自定义的“处理程序”,因为没有更好的词“,它接受一个查询对象,解析其中的属性并将其传递给一个位置处理程序,该处理程序获取该查询的所有位置数据,然后将其传递给一个潮汐数据处理程序以及天气数据处理程序。在此过程的许多阶段,我需要访问各种表并最终从各种类中启动这些对象。有关更多信息,请参阅:stackoverflow.com/questions/9116838/…
-
好吧,如果您担心创建太多对象,您可以随意使用
$db->query('SELECT * FROM tide');而不是 Zend_Db_Table。这样你就只剩下一个对象了。
标签: php database oop zend-framework