(使用PHP风格的代码)
以免想象我们有一个控制器,其中有一组字符串数据:
class Controller {
private $data = array('a', 'b', 'c', 'd', 'e');
}
现在控制器必须将数据传递给View以生成这样的HTML:
<p>a</p>
<p>b</p>
<p>c</p>
<p>d</p>
<p>e</p>
问题:
我们是否应该将所有数组传递给View,让它在自己内部处理数组数据,如:
class Controller {
private $data = array('a', 'b', 'c', 'd', 'e');
function __construct($data) { // Assigns data array to view
$view = new View;
$view->produceHTML($data)
}
}
class View {
public function produceHTML($data) {
foreach($data as $value) {
echo "<p>$value</p>" . PHP_EOL; // PHP_EOL - PHP Predifined constant (End Of Line)
}
}
}
或者我们应该为每个元素定义不同的视图,比如:
class Controller {
private $data = array('a', 'b', 'c', 'd', 'e');
function __construct($data) { // Assigns data array to view
$view = new View;
$view->produceHTML($data)
}
}
class View {
public function produceHTML($data) {
foreach($data as $value) {
$this->produceP($value);
}
}
private function produceP($value) {
echo "<p>$value</p>" . PHP_EOL;
}
}
使用短数据值只是示例。在大多数情况下,我遇到过更复杂的视图,这些视图会生成带有大量嵌套元素的大型div
。
但是,将元素集合发送到View的最佳做法是什么?
在正确的MVC中,控制器不应该向视图"发送"任何数据。视图是应用程序的活动层,应该从模型层检索数据。控制器应仅更改模型的状态,但不应检索任何数据。