将对象分配给View,大型MySQL结果集

时间:2010-04-15 10:24:37

标签: php mysql smarty

你好(抱歉我的英语不好)

将对象分配给视图并在其中调用其方法是不好的做法? 我使用smarty作为我的模板引擎。

在我的控制器中,我可以这样做

1#

$this->view->assign("name", $this->model->getName);

在我看来

<p>{$name}</p>

OR

2#

$this->view->assign("Object", $this->model);

在我看来

<p>{$Report->getName()}</p>

我最大的问题是我必须处理来自MySQL的大量数据,我想如果我想制作一个在循环mysql_fetch_row时打印出数据的方法。至少我知道在模型中使用html-tags是件坏事。

所以我会将对象分配给视图,以便将结果放到页面上的正确位置..

首先将mysql-result读取到数组可能会导致内存问题,对吗?那么什么是解决MVC风格的解决方案..

是的,我正在使用自己的框架。

3 个答案:

答案 0 :(得分:1)

就MVC而言,我已经看到了大多数使用的第一种方法。将所有处理逻辑放在控制器中,仅使用查看进行显示,无需在视图中放置处理({$Report->getName()})。

答案 1 :(得分:1)

从我的观点来看,直接与模型交谈的观点没有错。而且,这就是经典的“三角形”MVC应该起作用的方式。

答案 2 :(得分:1)

理想情况下,您应该使用第一种方法。不幸的是,我们不是生活在理想的世界里。如果做到这一点太痛苦,我真的没有看到第二种方法的问题。 难道不是有办法妥协吗?如果您可以将模型中列的名称作为数组获取,则可以循环遍历它们并动态地将每个值分配给smarty。这样你的视图会更简单,你可以避免控制器中的大量代码。

至于占用太多内存......你在一个页面中发布的数据量会占用太多内存似乎不太可能。我认为在你遇到内存问题之前,你会遇到UI问题(单页中的内容太多)。无论如何,你为什么不尝试一个简单的基准。您可以使用PHP的memory_get_usage()函数。