Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
CakePHP: Manual/Beginning/UnderstandingMVC ...

Понимание архитектуры MVC

Обзор


При написании программы на CakePHP принято следовать шаблону MVC (Модель-Отображение-Контроллер). Программирование с применением этой модели разделяет ваше приложение на три основные части. Модель оперирует информацией Базы Данных, Отображение создает страницу с информацией из модели, а Контроллер обрабатывает запросы, сделанные пользователями.


вызовы, совершаемые CakePHP (15 Кб)
Изображение 1: Основные запросы MVC

Рисунок 1 демонстрирует каркас MVC запроса в Cake. Рассмотрим простейший пример. Предположим пользователь Иван нажал на ссылку «Купить пирог!», эта ссылка ведет на вашу страницу.

  1. Иван нажимает на ссылку http://www.example.com/cakes/buy, и его браузер делает запрос к вашему веб-серверу.
  2. Диспетчер проверяет запрошенный адрес (/cakes/buy) и запускает необходимый Контроллер.
  3. Контроллер обрабатывает свою логику, например он проверяет вошел ли Иван в систему (залогинился ли он на сайте).
  4. Контроллер также взаимодействует с Моделями для обмена информацией. Как правило, Модели — это таблицы базы данных, но также вполне могут быть LDAP записями, RSS-лентами или простыми файлами. В данном случае Контроллер использует Модель для того чтобы выбрать из базы данных информацию о последней покупке Ивана.
  5. После того как Контроллер обработал данные — он передает их в Отображение. Отображение принимает данные и преобразует их в готовые страницы для отображения пользователям. Обычно результатом работы отображения является HTML документ, но не трудно получить PDF, XML документы или объект JSON. Все зависит от ваших потребностей.
  6. Отображение использует информацию из Контроллера для того чтобы создать готовый документ для пользователя. Иван видит в браузере готовую страницу.

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

Преимущества


Почему используется именно MVC? Потому что это испытанный шаблон проектирования приложений, который делает ваше приложение модульным и быстрым. Разделение приложения на Модель, Контроллер и Отображение делает его «легким на подъем». Очень легко добавить какие-то новые возможности и молниеносно изменить внешний вид приложения. Модульность позволяет работать над одним проектом сразу нескольким разработчикам. Так же ничто не мешает внести изменения в часть приложения без какого-либо ущерба другой его части.


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


 
Комментарии

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

host-81-176-8-75.ttn.ru (2008-07-29 17:22:28)

Нет! Отображение – отдельное звено и это обеспечивает отделение функционала от дизайна, т.е. смело можно изменять дизайн практически не влазя в код.

219-58.static.alkar.net (2008-08-02 13:16:14)

Второе предложение: _Отображение_создает_страницу_с_информацией_из_модели_
5 пункт из списка: _После_того_как_Контроллер_обработал_данные_—_он_передает_их_в_Отображение_.
Так откуда View берет данные из Controller'а или из Model'и ?

n116h21.catv.ext.ru (2008-08-31 13:18:13)

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

132-PPPoE-orion.rs.net.ua (2008-11-30 18:00:25)

View берет данные из контроллера, а тот из модели.
Касательно диспетчера сам туманно понял.

77-120-195-102.telesweet.net (2008-12-21 08:38:16)

Диспетчер, я так понял, какой-либо индехпхп, который разбирает урл и определяет кокой контроллер подключать

79.171.124.55 (2008-12-23 23:37:18)

А модель – это разнообразные данные? Массивы, xml, таблички из БД?

149-173.canaltelecom.net (2009-02-12 15:07:30)

/wiki/Manual/Developing/Models
раздел в процессе перевода, но ответ на ваш вопрос уже есть (в самом начале)

/Алексей Ершов? (2009-02-13 11:01:05)

Здесь так и есть, а насчет «удобнее» – вопрос спорный (см. ниже)
Неверно – согласно приведенной схеме, Контроллер выбирает View(если их несколько), скармливает ему данные и заставляет работать. Это схема с ведущим контроллером, а существует еще схема с ведомым контроллером. Разница в том, кто кого заставляет работать (плюс подымается тема сцепленности кода, но это уже другой вопрос).
client151-42.nevsk.tvoe.tv (2009-09-13 04:01:09)
Читать надо до конца и реагировать на ссылки, а не задавать глупых вопросов.
94.241.28.19 (2009-09-26 23:16:45)
А зачем так нагружать php этим диспетчером? Разве не проще использовать Mod Rewrite? Например для действия http://www.site.com/action/edit-news/2/

Чем не устраивает такая структура? Работает намного быстрее чем каждый раз анализировать URL.
49-88-179-94.pool.ukrtel.net (2010-08-04 10:58:53)

Вы пробовали такое запустить на Windows-хостинге?)
Стремясь к универсальности, как всегда проигрываем в производительности.
ip174-13.mmsn.ru (2011-11-29 00:11:56)

Зачем PHP запускать на Windows-хостинге?

Вы пробовали ASP.net приложения запускать на Linux-хостинге? Они тоже иногда там работают...
176.15.74.116 (2011-12-17 03:07:57)
«Изображение 1: Основные запросы MVC» – не отображается...
57-40-174-109.citynsk.ru (2012-03-03 20:44:58)
Добавить комментарий:

Файлы [Скрыть файлы/форму]
2007-11-27 22:31:00    (15 Кб)  requests.png вызовы, совершаемые CakePHP