1

(使用 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带有大量嵌套元素的大 s。

但是将元素集合发送到 View 的最佳做法是什么?

4

1 回答 1

3

在正确的 MVC 中,控制器不应将任何数据“发送”到视图。视图是应用程序的一个活动层,它应该从模型层检索数据。控制器应该改变模型的状态,而不应该检索任何数据。

于 2012-09-06T18:46:56.550 回答