Концепція mvc для чайників

Концепція MVC (Model-View-Controller: модель-вид-контролер) дуже часто згадується в світі веб програмування в останні роки. Кожен, хто хоч якось пов'язаний з розробкою веб додатків, так чи інакше стикався з даними акронімом. Сьогодні ми розберемося, що таке - концепція MVC, і чому вона стала популярною.

найдавніша історія

MVC - це не шаблон проекту, це конструкційний шаблон, який описує спосіб побудови структури нашого застосування, сфери відповідальності та взаємодія кожної з частин в даній структурі.

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

Шалена популярність даної структури в веб додатках склалася завдяки її включенню в два середовища розробки, які стали дуже популярними: Struts і Ruby on Rails. Ці дві середовища розробки намітили шляхи розвитку для сотень робочих середовищ, створених пізніше.

Концепція mvc для чайників

MVC для веб додатків

Ідея, яка лежить в основі конструкційного шаблону MVC, дуже проста: потрібно чітко розділяти відповідальність за різне функціонування в наших програмах:

Концепція mvc для чайників

Додаток розділяється на три основних компоненти, кожен з яких відповідає за різні завдання. Давайте детально розберемо компоненти на прикладі.

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

Контролер керує запитами користувача (одержувані у вигляді запитів HTTP GET або POST, коли користувач натискає на елементи інтерфейсу для виконання різних дій). Його основна функція - викликати і координувати дію необхідних ресурсів і об'єктів, потрібних для виконання дій, що задаються користувачем. Зазвичай контролер викликає відповідну модель для задачі і вибирає відповідний вид.

Модель (Model)

Концепція mvc для чайників

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

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

Вид (View)

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

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

розберемо приклад

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

Концепція mvc для чайників

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

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

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

У чому переваги?

Саме очевидна перевага, яку ми отримуємо від використання концепції MVC - це чіткий поділ логіки подання (інтерфейсу користувача) і логіки програми.

Крім ізолювання видів від логіки додатки, концепція MVC істотно зменшує складність великих додатків. Код виходить набагато більш структурованим, і, тим самим, полегшується підтримка, тестування і повторне використання рішень.

А навіщо використовувати робочу середу?

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

Розглянемо cakePHP як приклад робочого середовища MVC. Після установки у вас буде три основних директорії:

Папка app є місцем розміщення ваших файлів. Це місце для розробки вашої частини програми.

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

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

Ваше робоче простір (директорія app) має наступну структуру:

Вам потрібно розміщувати ваші контролери в директорії controllers. моделі в директорії models і види в директорії views.

Як тільки ви почнете використовувати робочу середу, то відразу стане ясно, де розміщується практично будь-яка частина вашого застосування, яку треба створити або модифікувати. Така організація сама по собі значно спрощує процес розробки і підтримки програми.

Використання робочого середовища для нашого прикладу

Пам'ятайте, ми розглядали книжковий магазин і цікавого користувача, який хотів побачити повний список книг по темі фентезі. Контролер отримував запит користувача і координував необхідні дії.

Отже, як тільки користувач натискає кнопку, браузер запитує даний url:

CakePHP форматує URL за шаблоном / controller / action / param1 / param2. де action - це функція, яка викликається контролером. У старому класичному вигляді url буде виглядати так:

контролер

У робочому середовищі cakePHP, наш контролер буде виглядати так:

Просто, чи не так. Даний контролер буде збережений як books_controller.php і розміщений в / app / controllers. Він містить список функцій, які виконують дії для нашого прикладу, а також інші функції для виконання пов'язаних з книгами операцій (додати нову книгу, видалити книгу, і так далі).

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

Все що потрібно зробити в списку дій - викликати модель для отримання даних і потім вибрати вид для подання їх користувачу. Ось як це робиться.

this-> Book - це наша модель, і частина коду:

повідомляє моделі, що потрібно повернути список книг з обраної теми (ми розглянемо модель пізніше).

Метод set в рядку:

Контролер передає дані увазі. Мінлива books приймає дані, повернуті моделлю, і вони стають доступними для виду.

Тепер залишається тільки вивести на екран вид, але ця функція виконується автоматично в cakePHP, якщо ми використовуємо вид за замовчуванням. Якщо ми хочемо використовувати інший вид, то треба явно викликати метод render.

Модель навіть ще простіше:

Чому вона порожня? Тому що вона є спадкоємцем базового класу, який забезпечує необхідну функціональність і нам потрібно використовувати угоду про імена в CakePHP для того, щоб робоче середовище виконувала всі інші завдання автоматично. Наприклад, cakePHP відомо на підставі імені, що дана модель використовується в BooksController. і що вона має доступ до таблиці бази даних з ім'ям books.

Код зберігаємо як book.php в папці / app / models.

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

Зберігаємо вид як list.ctp (list - це ім'я дії, а ctp означає шаблон CakePHP) в папці / app / views / books (тому, що це вид для дії контролера).

Ось так виконуються всі три компонента за допомогою робочого середовища CakePHP!

  • unicom, тому що це безперечно вище рівень розробки, і до нього ще потрібно підрости;)! В якому використовується саме концепція, Dmitriy_chelios, а дана архітектура програмного забезпечення, в свою чергу, використовує цю концепцію. Цитата з Вікіпедії: "Наприкінці # 769; пція, або наприкінці # 769; пт, (від лат. Conceptio - розуміння, система) - певний спосіб розуміння (трактування) будь-якого предмета, явища або процесу; основна точка зору на предмет; керівна ідея для їх систематичного висвітлення. " А ще в свою чергу: фреймворки, такі як RubyOnRails, Django і тд використовують цю архітектуру!

  • Незрозуміло, де і коли формується масив books, який виводиться в Віде. У контролера лише описаний метод класу. А де Соза об'єкт, і де до нього застосовується описаний метод?

  • Концепція mvc для чайників

    За рахунок отримання інформації відразу по двох каналах (зір і слух) ефективність навчання значно перевершує навчання по книгах. А домашні завдання і онлайн-тести дозволять вам постійно думати на мові, що вивчається і відразу перевіряти свої знання!

    Концепція mvc для чайників

    Концепція mvc для чайників

    Якщо ви давно хочете як слід вивчити HTML, то у мене для Вас є чудова новина!

    Концепція mvc для чайників

    Якщо ви вже вивчили HTML і хочете рухатися далі, то наступним кроком буде вивчення технології CSS.

    Концепція mvc для чайників

    Якщо ви хочете розібратися з поняттями домену і хостингу, навчитися створювати бази даних, закачувати файли сайту на сервер по FTP, створювати піддомени, налаштовувати поштові скриньки для свого сайту і стежити за його відвідуваністю, то цей курс створений спеціально для вас!