is_реклам:

пошук, категорії та ін. показати ▼

Знайомство із MVC через приклади на PHP

Знайомство із MVC через приклади на PHP
автор опубліковано

MVC [ Model View Controller] - це шаблон проектування, який вперше був опублікований в 1970-х роках. Він являє собою зразок архітектури програмного забезпечення, заснований на принципі поділу представлення даних і функціоналу, де ці дані формуються і обробляються. У теорії, якщо слідувати принципу шаблону, то frond-ent і, back-end команди можуть працювати над різними частинами одних і тих же компонентів, не заважаючи один одному.

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

У цій статті буде описано принципи роботи MVC, та правила роботи даного шаблону, і на завершення описаний приклад простої реалізації MVC на PHP. Якщо Ви вперше чуєте про MVC, то вам буде цікаво.

Принцип роботи MVC

MVC - це абревіатура від трьох слів: модель[Model], вид (представлення)[View], контролер[Controller]. Візуальне подання роботи даного шаблону, ви можете побачити нижче:

На малюнку детальн зображено принцип роботи кожного із компонент MVC, а також процеси(відношення) між ними.

Модель

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

Тут самим головним є розуміння того, що після того, як дані пішли із моделі, вони втрачають будь-який зв'язок із нею. Іншими словами, модель ніяким чином не відслідковує подальшу долю тих даних, які відправила контролеру чи в'юсі. Єдина задача моделі — це відправка і обробка даних.

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

Представлення (Вид)

Представлення — це компонент MVC, де виконується вивід даних на екран. При класичному підході до веб розробки, в представленні буде формуватись і відображатись HTML код. Будь-які представлення тісно зв'язані з контролером до якого відносяться.

Також якщо говорити про даний компонент не можна не згадати про наступну тему. Дуже часто веб розробники порушують цілісність MVC, створюючи в представленнях(вюхах) обєкт моделі і витягуючи із неї дані. Так робити не потрібно. Для того щоб повністю слідувати цілісніть MVC, не повинно бути ніяких звязків між моделями і предсавленнями, а всі діалоги між даними компонентами слід виконувати через контролер. Представлення — це, по суті, шаблон сторінки куди приходять дані.

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

Контролер

Останнім компонентом MVC є контролер. Як Ви уже зрозуміли, контролери призначені для зв'язку між моделями і предствленнями, а також для обробки даних, які прийшли від користувача через форми та інші джерела. Після того як контролер отримав інформацію, в залежності від необхідності задачі, він передасть дані в представлення для виводу або в модель для актуалізації (долучення, редагування, видалення).

Проста реалізація MVC на PHP

Реалізувати MVC можна практично на будь-якій мові програмування. Зараз ми створимо простий приклад на PHP:

class Model{
  public $string;
  
  public function __construct(){
    $this->string = "MVC + PHP = Awesome!";
  }
}
class View{
  private $model;
  private $controller;

  public function __construct($controller,$model) {
    $this->controller = $controller;
    $this->model = $model;
  }

  public function output(){
    return "<p>" . $this->model->string . "</p>";
  }
}
class Controller {
  private $model;
  
  public function __construct($model) {
    $this->model = $model;
  }
}

Отже, ми створили по одному класу для кожного із компонентів MVC. Тепер, давайте налаштуємо зв'язки між ними:

$model = new Model();
$controller = new Controller($model);
$view = new View($controller, $model);
echo $view->output();

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

Тепер, давайте розширимо даний приклад і додамо трішки інтерактиву. Для прикладу, викличемо якийсь метод контролера в залежності від переданого йому GET параметру.

class Model{
  public $string;

  public function __construct(){
    $this->string = “MVC + PHP = Awesome, click here!”;
  }
}
class View{
  private $model;
  private $controller;

  public function __construct($controller,$model) {
    $this->controller = $controller;
    $this->model = $model;
  }

  public function output() {
    return '<p><a href="mvc.php?action=clicked">' . $this->model->string . "</a></p>";
  }
}
class Controller{
  private $model;

  public function __construct($model){
    $this->model = $model;
  }

  public function clicked() {
    $this->model->string = “Updated Data, thanks to MVC and PHP!”;
  }
}

Тепер знову наладимо зв'язки між компонентами і додамо трішки логіки:

$model = new Model();
$controller = new Controller($model);
$view = new View($controller, $model);

if (isset($_GET['action']) && !empty($_GET['action'])) {
  $controller->{$_GET['action']}();
}

echo $view->output();

Тепер, якщо Ви назмете на посилання, то побачити зовсім інше повідомлення на екрані.

Висновки

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

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

Коротке посилання на цей пост http://isblog.com.ua/?p=3324

схоже за тегами

Коментарів 2

  1. Дякую) досить цікаво і просто як для студента)

    • dnister.lark пише:

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

Залишити коментар:

Яндекс цитирования UA TOP Bloggers