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ほとんどの場合、ネストされた要素がたくさんある大きなビューを生成する、はるかに複雑なビューに遭遇しました。

しかし、要素のコレクションをViewに送信するためのベストプラクティスは何ですか?

4

1 に答える 1

3

適切なMVCでは、コントローラーはビューにデータを「送信」しないでください。ビューは、モデルレイヤーからデータを取得する必要があるアプリケーションのアクティブレイヤーです。コントローラはモデルの状態を変更するだけで、データを取得することはできません。

于 2012-09-06T18:46:56.550 に答える