О применении MVC
Я видел все типы учебных пособий: представление работающего контроллера, передача модели контроллера в представление, установка параметров настройки контроллера представления.
Пример: MVC для чтения новости. Контроллер загружает модель. Если результат модели "ложный", я могу вызвать другой метод из другой модели, содержащей другой блок.
Класс View должен иметь отношение к View_found View_not_found?
if (model-> news === true) {
$ comment = model-> comment ()
}
Будет ли этот фрагмент кода ответственным за контроллер или это правило, что такая логика должна принадлежать бизнес-модели?
4 ответа
По своему опыту я склонен программировать модель и рассматривать ее как "слепую". модель и представление получают только необходимые параметры, а затем выплевывают то, что нужно. они должны делать минимально, чтобы не было никакой логики вообще.
для модели он выполняет незначительные проверки, такие как тип параметра и достоверность, и возвращает либо результат, либо ложь. контроллер не знает, как хранятся данные, где, почему и т. д.
для представления он должен получать строку предпочтительно только через одну точку входа, функцию, которая будет выполнять escape и echo. кроме этого, контроллер никогда не должен отображаться на странице.
все остальное для контроллера, чтобы переварить, как проверка, вызов, что нужно, определить, что к чему. контроллер видит все:
//get from model, pass parameter - that's it
if (model-> news ('all')) {
//manipulate data for result
//get appropriate view
view->parse(html); //pass html to view, that's it
} else {
//manipulate data for no result
//get appropriate view
view->parse(html); //pass html to view, that's it
}
Как сказал Расмус Лердорф
MVC - это текущая популярность в архитектурах веб-приложений. Он основан на дизайне настольных приложений на основе событий 4 и не очень хорошо вписывается в дизайн веб-приложений. Но, к счастью, никто на самом деле не знает, что означает MVC, поэтому мы можем назвать наш механизм разделения уровня представления MVC и двигаться дальше.
На самом деле, в веб-приложении обычно используют "MVC, ориентированный на действие", а не "MVC события". У вас есть контроллер, который знает его модель и представление для применения. Для отображения новостей у вас должен быть класс News, который является вашей моделью, NewsProvider, который работает с вашей базой данных. Ваш контроллер вычисляет данные, предоставленные базой данных и пользователем, и вызывает правильное представление.
Если вы хотите найти комментарий к новости модели, вам нужно создать модель комментария, получить ее из вашего dataProvider и визуализировать для просмотра.
Вот часть кода действия контроллера:-). Вся логика должна быть в контроллере. Представления представляют собой только части контента.
ОБНОВЛЕНО Рекомендую использовать здесь dataProvider. Метод модели (геттер) может вернуть объект DP для модели. Это зависит от того, какую платформу вы используете.
Лучшая практика - сохранять бизнес-логику в моделях.
см. ссылки ниже для справки
http://www.yiiframework.com/doc/guide/1.1/en/basics.best-practices
ASP.NET MVC - должна ли бизнес-логика существовать в контроллерах?
http://blogs.msdn.com/b/aspnetue/archive/2010/09/17/second_2d00_post.aspx