在MVC中使用视图


Using View in MVC

(使用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中,控制器不应该向视图"发送"任何数据。视图是应用程序的活动层,应该从模型层检索数据。控制器应更改模型的状态,但不应检索任何数据。