PHP MVC - Как оформить? - PullRequest
       20

PHP MVC - Как оформить?

5 голосов
/ 11 октября 2009

Я относительно хорошо разбираюсь в разработке сайтов. Я в основном хожу на ЛАМПУ, где у меня уже есть небольшая собственная «структура», которую я использую. Короче говоря, он отделяет логику от макета, и у меня есть один файл логики для одного или нескольких файлов макета в зависимости от того, какие представления поддерживаются в макете. Там есть раздел администратора, есть авторизация пользователя и все такое. Хорошо.

Итак, когда я хочу более детально проработать мой подход к проектированию / программированию на PHP - или программированию веб-сайтов в целом - я задаюсь вопросом, как правильно «думать» о MVC. Я склоняюсь в этом направлении, так как моя текущая среда очень ориентирована на DB и стала несколько тяжелой, когда производительность важна.

Итак, вот мой вопрос: Правильно ли я считаю, что контроллер обычно соответствует «разделу» или «странице», а представление заботится об отображении этого контроллера, и что модель обрабатывает объекты используется контроллером и отображается в представлениях?

Давайте рассмотрим пример (не слишком сложный, но достаточный для проверки правильности моего мышления):

Скажем, у нас есть простой сайт с играми. Разделы, как правило, выглядят примерно так: главная страница, игры, форумы, информация о / отказ от ответственности и т. Д.

классы контроллеров соответствуют разделам, но становятся немного более сложными, чтобы охватить «единичную» версию объекта, охватываемого разделом, то есть раздел игр становится двумя контроллерами; один для обзора игр (список игр) и один для самой страницы игры. В целом это будет что-то вроде титульная страница, обзор игр, игровая страница, форумы, форум, тематическая страница, информация и отказ от ответственности .

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

Модель (или объекты данных) обычно представляют собой пользователей, игры, форумы, темы, сообщения, а затем множество вспомогательных объектов, таких как теги тем, рекорды игр и то, что не позволяет темам классифицировать. и игры могут иметь рекорды и т. д. и т. д.

Является ли вышеуказанный «правильный» способ мышления или я полностью неправильно понимаю концепцию M-V-C для веб-сайтов.

Я подумываю о переходе на CodeIgniter или какую-то другую легкую платформу (не стесняйтесь комментировать выбор платформы или, если лучше, выбрать мою), так как мой собственный каркас очень ориентирован на DB и не сокращает его теперь, когда пара моих сайтов превышает 70 000 просмотров страниц в день.

Искреннее спасибо тем из вас, кто может помочь ответить на вопрос, является ли мой взгляд на MVC несколько правильным, а также, если возможно, добавить несколько советов о том, о чем следует думать при кодировании MVC, и при этом продолжать поддерживать передовые позиции. производительность (насколько это возможно при использовании скриптовых языков).

Ответы [ 3 ]

3 голосов
/ 11 октября 2009

Прежде всего, это не вопрос php, а вопрос о том, как применить шаблон MVC к веб-программированию. И действительно, шаблон MVC имеет такой большой смысл в области разработки веб-приложений, что он почти стал императивом в этой области приложений.

Теперь, что касается самого шаблона MVC, вы уже найдете очень хорошие ответы на SO. Например, Вопрос и Ответы Что входит в контроллер .

Что касается вопроса о том, как сопоставить структуру вашего сайта с архитектурой вашего контроллера, я бы порекомендовал следующее.

  • не пытайтесь отобразить вашу навигацию, а скорее логику приложения
  • один контроллер для каждой логической единицы функций
  • внутри контроллеров, один публичный метод для каждого представления
  • довольно стройные контроллеры, которые в основном играют роль шлюза между моделями и видами

Так, например, если в вашем случае gameoverview - это просто список, ему не нужен собственный контроллер, а всего лишь метод в indexcontroller, который получает список из модели и отправляет его в соответствующее представление. Но если ваше игровое представление представляет собой сложный механизм с множеством возможностей и различными подпредставлениями и т. Д., У вас может быть контроллер обзор с несколькими методами для различных представлений и задач.

Я очень рекомендую заглянуть в Zend Framework и узнать, как эти проблемы там решаются. ИМО, сделав это, вы действительно можете многое узнать о теме вашего вопроса.

1 голос
/ 11 октября 2009

CodeIgniter - отличный инструмент для начинающих MVC, Я бы посоветовал вам взглянуть на net.tutsplus.com , на котором CodeIgniter

постоянно идет видеоурок

добавлены

для начинающих, желающих погрузиться в CI, ссылки на видеотуты:

добавил

Я не рекомендую CI как отличный и мощный фреймворк, но он прост для начинающих , и они могут многому научиться, лично я за Symfony и Yii

0 голосов
/ 11 октября 2009

Википедия, вероятно, лучше объяснит это, но в основном,

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

ваш контроллер обрабатывает запросы на изменение модели.

ваш вид - это отображение части модели и обратной связи от контроллера.

Ни контроллер, ни модель не должны обрабатывать дисплей. дисплей. Ни модель, ни представление не должны обрабатывать входящие данные POST или тому подобное. Ни контроллер, ни представление не должны иметь дело с источниками данных.

см. http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller#Description для хорошего описания ролей.

То, что вы описываете в вопросе, не подходит под это описание. Скажем, должен быть один контроллер на класс модели (или меньше) для обработки запросов к элементам, которые представляют эти классы модели.

Ваши представления не должны быть явно привязаны к какому-либо одному элементу контроллера или модели. представление представляет собой подмножество модели в целом.

Единственное взаимодействие между представлением и контроллером - отображение обратной связи.

Надеюсь, это поможет.

EDIT: Как уже отмечалось, есть ряд уже созданных инфраструктур MVC. (Список можно найти в http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller#PHP), и я бы не советовал слишком привязываться к уже построенному фреймворку, если есть другой, который делает работу лучше.

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