MVC: Должен ли вид всегда получать массивы вместо объектов? - PullRequest
2 голосов
/ 22 января 2011

Мне интересно, должны ли представления быть переданы объектам или они должны получать только массивы. Я использую ORM Framework. Таким образом, на странице просмотра проекта я могу передать представление объекта проекта и позволить ему отображать списки задач и задач проекта.

Итак, на мой взгляд, у меня есть код:

foreach ($this->project->getTodoLists() as $todoList) {
  // render lists
  foreach ($todoList->getTodos() as $todo) {
    // render todos
  }
}

Это нормально? Я думаю, что при ленивой загрузке доктрины он запускает SQL при вызове get*(). Это имеет значение здесь?

Или я должен в моем контроллере анализировать всю необходимую информацию в чистые массивы?

Я использую PHP, Zend Framework 1.11, Doctrine 2 ORM. Но на самом деле не имеет значения, что я использую на мой взгляд

1 Ответ

5 голосов
/ 22 января 2011

Одним из преимуществ использования не ленивых типов данных (т. Е. Массивов) для визуализации представления является то, что в этом нет ничего плохого. Например, если значение объекта прочитано и запускает вызываемую функцию, которая в итоге завершается сбоем (проблема с БД, нехватка памяти и т. Д.), Рендеринг представления может быть поврежден (сообщения об ошибках IE в документе HTML). Когда вы передаете массив представлению, не имеет значения, к каким данным осуществляется доступ или в каком порядке, поскольку он предварительно отображается.

Хотя эта проблема в основном может быть преодолена путем буферизации вывода, что-то (например, фатальные ошибки) не может быть перехвачено и попадет на страницу.

Конечно, в таком языке, как PHP, лень может помочь уменьшить всплески памяти (поскольку она распределяется по мере необходимости, а затем воспроизводится) и использование ЦП (если вы не закончите оценку всех объектов).

В конце концов, все сводится к тому, насколько сложными должны быть ваши взгляды. Простая структура данных -> Простое представление и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...