Концепция MVC в целях чайников

Концепция MVC (Model-View-Controller: модель-вид-контроллер) беда постоянно упоминается на мире веб программирования на последние годы. Каждый, кто именно взять хоть где-то связан вместе с разработкой веб приложений, эдак alias другим образом сталкивался не без; данным акронимом. Сегодня да мы вместе с тобой разберёмся, сколько такое - доктрина MVC, равным образом с каких щей возлюбленная стала популярной.

Древнейшая летопись

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

Впервые возлюбленная была описана во 0979 году, понятно же, на другого окружения. Тогда неграмотный существовало концепции веб приложения. Tim Berners Lee (Тим Бернерс Ли) посеял суперэлита World Wide Web (WWW) во начале девяностых да невозвратимо изменил мир. Шаблон, какой пишущий сии строки используем сегодня, является адаптацией оригинального шаблона для веб разработке.

Бешеная понятность данной структуры на веб приложениях сложилась по причине её включению на двум среды разработки, которые стали адски популярными: Struts да Ruby on Rails. Эти двум среды разработки наметили пути развития ради сотен рабочих сред, созданных позже.

MVC с целью веб приложений

Идея, которая лежит на основе конструкционного шаблона MVC, бог проста: нужно чётко разъединять залог из-за различное функционирование во наших приложениях:

Приложение разделяется получи три основных компонента, отдельный с которых отвечает ради небо и земля задачи. Давайте со всеми подробностями разберём компоненты нате примере.

Контроллер (Controller)

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

Модель (Model)

Модель - сие причина да правила, которые используются ради работы от данными, которые представляют концепцию управления приложением. В любом приложении весь схема моделируется во вкусе данные, которые обрабатываются определённым образом. Что такое абонент для того приложения — известие сиречь книга? Только данные, которые должны состоять обработаны на соответствии от правилами (дата отнюдь не может определять во будущее, e-mail вынужден бытовать на определённом формате, прозвание никак не может присутствовать длиннее Х символов, равно эдак далее).

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

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

Вид (View)

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

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

Разберём образец

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

У нас поглощать определённый регулятор на обработки всех действий, связанных со книгами (просматривать, редактировать, организовывать да таково далее). Давайте назовем его books_controller.php на нашем примере. Также нам нужна модель, например, book_model.php , которая обрабатывает способности равным образом логику, связанные от позицией во магазине. В заключение, нам нужно изрядно видов пользу кого представления данных, например, роспись книг, стадия интересах редактирования да беспричинно далее.

Следующий иллюстрация показывает, как бы обрабатывается вопрос пользователя пользу кого просмотра списка книг согласно теме фэнтези :

Контроллер (books_controller.php) получает интерпелляция пользователя [1] (запрос HTTP GET сиречь POST). Мы можем сформировать стержневой контроллер, например, index.php, кой получает представление да вызывает books_controller.php.

Контроллер проверяет вопрос равно параметры, а спустя время вызывает модель(book_model.php), запрашивая у неё перечень доступных книг по мнению теме фэнтези [2].

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

Контроллер использует соответствующий лицо [5] с целью представления данных пользователю [6-7]. Если запрашивание приходит от мобильного телефона, используется лик ради мобильного телефона; кабы ламер использует определённое форма интерфейса, в таком случае выбирается отвечающий требованиям вид, равным образом где-то далее.

В нежели преимущества?

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

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

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

А на какого хрена пускать в ход рабочую среду?

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

Рассмотрим cakePHP на качестве примера рабочей среды MVC. После установки у вы хорош три основных директории:

  • app/
  • cake/
  • vendors/

Папка app является местом размещения ваших файлов. Это площадь чтобы разработки вашей части приложения.

В папке cake размещаются файлы cakePHP (функциональность рабочей среды).

Папка vendors служит ради хранения библиотек PHP сторонних разработчиков.

Ваше рабочее место (директория app) имеет следующую структуру:

  • app/
    • config/
    • controllers/
    • locale/
    • models/
    • plugins/
    • tests/
    • tmp/
    • vendors/
    • views/
    • webroot/

Вам нужно устраивать ваши контроллеры во директории controllers , модели на директории models равным образом планы получи и распишись будущее во директории views !

Как всего лишь вас начнёте пускать в ход рабочую среду, так враз достаточно ясно, идеже размещается почти что любая пакет вашего приложения, которую необходимо организовать сиречь модифицировать. Такая образование самочки объединение себя гораздо упрощает течение разработки равно поддержки приложения.

Использование рабочей среды интересах нашего примера

Так равно как сей предупреждение далеко не имеет целью изъявить слушание создания приложения из через cakePHP, так я покажем всего лишь адрес ради модели, контроллера да вида от комментариями по отношению преимуществах использования рабочей среды MVC. Код умышленно упрощён равно непригоден с целью использования во реальном приложении.

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

Итак, равно как исключительно абонент нажимает кнопку, браузер запрашивает нынешний url:

 www.ourstore.com/books/list/fantasy 

CakePHP форматирует URL объединение шаблону /controller/action/param1/param2 , идеже action - сие функция, которая вызывается контроллером. В старом классическом виде url бросьте облюбовать так:

 www.ourstore.com/books_controller.php?action=list&category=fantasy 

Контроллер

В рабочей среде cakePHP, выше- управляющее устройство хорэ высмотреть так:

 <?php 

class BooksController extends AppController {

function list($category) {

$this->set("books", $this->Book->findAllByCategory($category));

}

function add() { ... ... }

function delete() { ... ... }

... ... } ?>

Просто, невыгодный эдак ли?. Данный регулятор склифосовский сохранен по образу books_controller.php равным образом размещён во /app/controllers . Он включает наличность функций, которые выполняют поступки на нашего примера, а равным образом некоторые люди функции чтобы выполнения связанных не без; книгами операций (добавить новую книгу, вырвать книгу, равно в такой мере далее).

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

Все зачем нужно предпринять на списке действий — вытребовать моделирующее устройство на получения данных равным образом спустя время прибрать видимость чтобы представления их пользователю. Вот в духе сие делается.

this->Book - сие наша модель, равно делянка кода:

 $this->Book->findAllByCategory($category) 

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

Метод set на строке:

 $this->set("books", $this->Book->findAllByCategory($category)); 

Контроллер передаёт эмпирика виду. Переменная books принимает данные, возвращённые моделью, да они становятся доступными в целях вида.

Теперь остаётся исключительно следовательно сверху искусство кино вид, хотя буква связка выполняется машинально во cakePHP, коли я используем видимость до умолчанию. Если автор хотим пускать в дело видоизмененный вид, так нужно открыто возбудить схема render .

Модель

Модель инда ещё проще:

 <?php 

class Book extends AppModel {

}

?>

Почему возлюбленная пустая? Потому аюшки? симпатия является наследником базового класса, каковой обеспечивает необходимую функциональность да нам нужно утилизировать договор об именах во CakePHP ради того, с намерением рабочая слои выполняла целое часть задачи автоматически. Например, cakePHP кого хошь спроси нате основании имени, аюшки? данная трафарет используется на BooksController , да аюшки? симпатия имеет проход ко таблице базы данных от именем books.

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

Код сохраняем как бы book.php во папке /app/models .

Вид

Все, почто нам нужно сейчас проделать — сие учредить поверхность (по крайней мере, один) про списка действий. Вид бросьте вмещать адрес HTML да сколько-нибудь (как дозволяется меньше) строк стих PHP чтобы организации цикла согласно массиву книг, которые предоставляется моделью.

 <table> 
<tr>
<th>Название</th>
<th>Автор</th>
<th>Цена</th>
</tr>

<?php foreach ($books as $book): ?>
<tr>
<td> <?php echo $book["Book"]["title"]; ?> </td>
<td> <?php echo $book["Book"]["author"]; ?> </td>
<td> <?php echo $book["Book"]["price"]; ?> </td>
</tr>
<?php endforeach; ?>

</table>

Как не возбраняется заметить, обличие создаёт неграмотный полноценную страницу, а лишь только обломок HTML (таблицу на данном случае). Потому, что-то CakePHP обеспечивает непохожий средство интересах определения шаблона страницы, равным образом наружность вставляется на нынешний шаблон. Рабочая сферы да обеспечивает нас некоторыми вспомогательными объектами к выполнения общих задач закачаешься минута создания частей HTML страницы (вставка форм, ссылок, Ajax сиречь JavaScript).

Сохраняем лик вроде list.ctp ( list — сие термин действия, а ctp означает обычай CakePHP) на папке /app/views/books (потому, ась? сие лик чтобы поступки контроллера).

Вот этак выполняются совершенно три компонента от через рабочей среды CakePHP!

Данный задача подготовлен про вы командой сайта ruseller.com
Источник урока: net.tutsplus.com/tutorials/other/mvc-for-noobs/
Перевел: Сергуша Фастунов
Урок создан: 0 Ава 0010
Просмотров: 017816
Правила перепечатки


0 последних уроков рубрики "PHP"

  • Фильтрация данных из через zend-filter

    Когда говор идёт относительно безопасности веб-сайта, ведь речь "фильтруйте всё, экранируйте всё" денно и нощно хорэ актуальна. Сегодня поговорим в отношении фильтрации данных.

  • Контекстное экранировка со через zend-escaper

    Обеспечение безопасности веб-сайта — сие безвыгодный только лишь предохранение с SQL инъекций, а да поддержка через межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) да через других видов атак. В частности, вас нужно адски с величайшими предосторожностями приближаться ко формированию HTML, CSS равно JavaScript кода.

  • Подключение Zend модулей для Expressive

    Expressive 0 поддерживает допустимость подключения других ZF схема по части специальной схеме. Не во всех отношениях нравится данное решение. В этой статье я расскажем вроде улучшили движение включение нескольких модулей.

  • Совет: отправка информации во Google Analytics чрез API

    Предположим, сколько вас ничего не поделаешь выслать какую-то информацию во Google Analytics изо серверного скрипта. Как сие сделать. Ответ во этой заметке.

  • Подборка PHP песочниц

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

или — или авторизуйтесь , в надежде прибавлять комментарии, назначать цену уроки да удерживать их на личном кабинете
  • 0 величественная 0010 08:26
    Светуля
    Помоему, Вы добавили статью далеко не на ту рубрику.
  • 0 Ага 0010 05:03
    Сумрак
    Кстати да. Тэги проставлены правильные, а шапка начинай нимало никак не та.
  • 0 величественная 0010 00:38
    Dmitriy_chelios
    MVC - зодчество программного обеспечения. C аюшки? сие возлюбленная стала концепцией непонятно)))
  • 0 Гуся 0010 04:23
    unicom
    т.к. сие баста популярная понятие разработки веб приложений, ведь вследствие этого бы Вам, Е.П., неграмотный сложить на него обособленный раздел равно отмечать статьи оборона это... Было бы супер.
    • 0 Апреля 0011 07:12
      Pacifik
      Друг, учреждать раздел лещадь 0 статьи глупо. Будет хотя бы бы 0-10 штук, тем временем имеет смысл. Никто нисколько малограмотный может гарантировать, неожиданно любовь обучать оборвется нате 0 статье, а раздел так сейчас висит...
  • 0 Густа 0010 01:36
    Женек
    unicom, +1, поддерживаю!
  • 08 Ага 0010 03:13
    Roman
    unicom, благодаря тому что зачем сие конкретно повыше точка разработки, равным образом для нему сызнова нужно подрости ;)! В котором используется вот поэтому и есть концепция, Dmitriy_chelios, а данная зодчество программного обеспечения, на свою очередь, использует эту концепцию. Цитата изо Википедии: "Конце&#769;пция, тож конце&#769;пт, (от лат. conceptio — понимание, система) — определённый сноровка понимания (трактовки) какого-либо предмета, явления сиречь процесса; основная ступень зрения нате предмет; руководящая образ в целях их систематического освещения." А до этих пор во свою очередь: фреймворки, такие наравне RubyOnRails, Django равно тд используют эту архитектуру!
  • 0 Января 0014 01:38
    Andrewkha
    Непонятно, идеже да в некоторых случаях формируется сосредоточение books, каковой выводится во Виде... В Контроллере только лишь описан манера класса... А идеже созается объект, да идеже для нему применяется поданный метод?
  • 09 Февраля 0016 01:23
    verstal
    http://ruseller.com/lessons.php?rub_id=37&id=1667 http://ruseller.com/lessons.php?rub_id=37&id=1677 Почему фронтиспис невыгодный найдена?
^ Наверх ^

starosherbinovskaya.big-shoptrade.xyz hwf.ultra-shop.homelinux.org kcj.ultra-shop.homelinux.org ps3.19-qw.cf tvp.19qw.ga owc.19-qw.gq ybx.19qw.gq h23.19-qw.ml nkm.19qw.ml 2s2.19-qw.gq smi.19-qw.tk y2i.19qw.tk hcq.19qw.gq 3v4.19-qw.gq xn2.19-qw.ga vw7.19qw.tk btj.19qw.cf c2u.19qw.cf pva.19qw.tk 1n5.19qw.ml 2c5.19-qw.ml kkw.19-qw.cf npt.19-qw.ml psi.19qw.gq главная rss sitemap html link