0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p><strong>Шаблон проектирования MVC</strong>представляет собой шаблон программной архитектуры "Модель-Представление-Контроллер". MVC - это один из способов организации кода и набор рекомендаций, описывающих ряд правил. Задача MVC заключается в том, чтобы наш код проще воспринимался и читался, а также быстрее обрабатывался компьютером.</p>
1
<p><strong>Шаблон проектирования MVC</strong>представляет собой шаблон программной архитектуры "Модель-Представление-Контроллер". MVC - это один из способов организации кода и набор рекомендаций, описывающих ряд правил. Задача MVC заключается в том, чтобы наш код проще воспринимался и читался, а также быстрее обрабатывался компьютером.</p>
2
<p>Главная идея MVC -<strong>отделить внешний вид приложения от его логики</strong>. Здесь мы говорим о веб-приложениях, поэтому внешний вид в данном случае - это HTML-разметка и CSS-оформление. А вот под логикой понимаются разнообразные скрипты, классы, функции и пр.</p>
2
<p>Главная идея MVC -<strong>отделить внешний вид приложения от его логики</strong>. Здесь мы говорим о веб-приложениях, поэтому внешний вид в данном случае - это HTML-разметка и CSS-оформление. А вот под логикой понимаются разнообразные скрипты, классы, функции и пр.</p>
3
<p>Шаблон MVC стимулирует развитие модульных систем, поэтому разработчики получают возможность ускоренно обновлять, удалять либо добавлять функционал. Давайте рассмотрим главные принципы и определение схемы построения<strong>MVC на примере PHP</strong>.</p>
3
<p>Шаблон MVC стимулирует развитие модульных систем, поэтому разработчики получают возможность ускоренно обновлять, удалять либо добавлять функционал. Давайте рассмотрим главные принципы и определение схемы построения<strong>MVC на примере PHP</strong>.</p>
4
<h2>Основные составляющие MVC</h2>
4
<h2>Основные составляющие MVC</h2>
5
<p>Как уже было сказано выше, главными составляющими шаблона проектирования MVC являются 3 части:<strong>Контроллер, Представление и Модель</strong>. Визуально это выглядит следующим образом:</p>
5
<p>Как уже было сказано выше, главными составляющими шаблона проектирования MVC являются 3 части:<strong>Контроллер, Представление и Модель</strong>. Визуально это выглядит следующим образом:</p>
6
<p>На рисунке изображены<strong>односторонний поток данных</strong>и путь его следования между разными компонентами, а также их взаимодействие.</p>
6
<p>На рисунке изображены<strong>односторонний поток данных</strong>и путь его следования между разными компонентами, а также их взаимодействие.</p>
7
<h2>Модель</h2>
7
<h2>Модель</h2>
8
<p>"Модель" - это постоянное хранилище данных, которое используется по всей структуре. Компонент обеспечивает доступ к данным для просмотра, отбора, записи. По сути это мост между другими компонентами: "Контроллер" и "Представление".</p>
8
<p>"Модель" - это постоянное хранилище данных, которое используется по всей структуре. Компонент обеспечивает доступ к данным для просмотра, отбора, записи. По сути это мост между другими компонентами: "Контроллер" и "Представление".</p>
9
<p>"Модель" не "знает", что происходит с данными дальше. Её задачи - поиск и подготовка данных, передаваемых прочим компонентам MVC, а также обработка их в постоянном хранилище. По сути это "<strong>привратник</strong>", который стоит возле хранилища данных и не задаёт лишних вопросов, однако принимает все запросы, которые поступают. "Модель" - вершина структуры MVC, без неё невозможна связь между "Представлением" и "Контроллером".</p>
9
<p>"Модель" не "знает", что происходит с данными дальше. Её задачи - поиск и подготовка данных, передаваемых прочим компонентам MVC, а также обработка их в постоянном хранилище. По сути это "<strong>привратник</strong>", который стоит возле хранилища данных и не задаёт лишних вопросов, однако принимает все запросы, которые поступают. "Модель" - вершина структуры MVC, без неё невозможна связь между "Представлением" и "Контроллером".</p>
10
<h2>Представление</h2>
10
<h2>Представление</h2>
11
<p>Это часть системы, в которой данным, запрашиваемым у "Модели", задаётся финишный вид их вывода. В веб-приложениях, построенных с помощью MVC, "Представлением" называют компонент, где генерируется и отображается код HTML.</p>
11
<p>Это часть системы, в которой данным, запрашиваемым у "Модели", задаётся финишный вид их вывода. В веб-приложениях, построенных с помощью MVC, "Представлением" называют компонент, где генерируется и отображается код HTML.</p>
12
<p>Кроме того, "Представление" перехватывает действия пользователей, которые после передаются "Контроллеру". Характерный пример - кнопка, генерируемая "Представлением". Если пользователь её нажимает, в "Контроллере" запускается действие.</p>
12
<p>Кроме того, "Представление" перехватывает действия пользователей, которые после передаются "Контроллеру". Характерный пример - кнопка, генерируемая "Представлением". Если пользователь её нажимает, в "Контроллере" запускается действие.</p>
13
<p>Неправильно говорить, что "Представление" - это файл шаблона, ведь на деле "Представление" - это гораздо больше, чем шаблон. Следует уяснить, что данные не передаются "Представлению" непосредственно "Контролллером", т. к. между ними нет прямой связи, они соединяются посредством "Модели".</p>
13
<p>Неправильно говорить, что "Представление" - это файл шаблона, ведь на деле "Представление" - это гораздо больше, чем шаблон. Следует уяснить, что данные не передаются "Представлению" непосредственно "Контролллером", т. к. между ними нет прямой связи, они соединяются посредством "Модели".</p>
14
<h2>Контроллер</h2>
14
<h2>Контроллер</h2>
15
<p>Он занимается обработкой данных, которые вводятся пользователем, а также участвует в обновлении "Модели". Этот компонент работает при взаимодействии с пользователем.</p>
15
<p>Он занимается обработкой данных, которые вводятся пользователем, а также участвует в обновлении "Модели". Этот компонент работает при взаимодействии с пользователем.</p>
16
<p>"Контроллер" можно назвать<strong>сборщиком информации</strong>, которая передаётся в "Модель" с последующей организацией хранения. Компонент не содержит другой логики, кроме той, что нужна для сбора входящих данных. Также он подключается лишь к одному "Представлению" и к одной "Модели". Таким образом создаётся система с 1-сторонним потоком данных, с одним выходом и одним входом в точках обмена.</p>
16
<p>"Контроллер" можно назвать<strong>сборщиком информации</strong>, которая передаётся в "Модель" с последующей организацией хранения. Компонент не содержит другой логики, кроме той, что нужна для сбора входящих данных. Также он подключается лишь к одному "Представлению" и к одной "Модели". Таким образом создаётся система с 1-сторонним потоком данных, с одним выходом и одним входом в точках обмена.</p>
17
<p>Компонент получает задачи с целью выполнения лишь тогда, когда пользователь осуществляет взаимодействие с "Представлением". При этом не стоит путать "Контроллер" со шлюзом, присваивая ему задачи и функции, относящиеся к "Представлению". Распространённая ошибка - наделение "Контроллера" функциями, отвечающими только за передачу и обработку данных из компонента "Модель" в компонент "Представление".</p>
17
<p>Компонент получает задачи с целью выполнения лишь тогда, когда пользователь осуществляет взаимодействие с "Представлением". При этом не стоит путать "Контроллер" со шлюзом, присваивая ему задачи и функции, относящиеся к "Представлению". Распространённая ошибка - наделение "Контроллера" функциями, отвечающими только за передачу и обработку данных из компонента "Модель" в компонент "Представление".</p>
18
<h2>MVC в PHP</h2>
18
<h2>MVC в PHP</h2>
19
<p>Давайте напишем<a>приложение на PHP с архитектурой MVC</a>. Начнём с примера каркаса:</p>
19
<p>Давайте напишем<a>приложение на PHP с архитектурой MVC</a>. Начнём с примера каркаса:</p>
20
<?php class Model { public $string; public function __construct(){ $this->string = "MVC + PHP = Awesome!"; } } <?php 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>"; } } <?php class Controller { private $model; public function __construct($model) { $this->model = $model; } }<p>Итак, мы имеем проект с несколькими основными классами для каждой из частей шаблона. Давайте настроим между ними взаимосвязь:</p>
20
<?php class Model { public $string; public function __construct(){ $this->string = "MVC + PHP = Awesome!"; } } <?php 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>"; } } <?php class Controller { private $model; public function __construct($model) { $this->model = $model; } }<p>Итак, мы имеем проект с несколькими основными классами для каждой из частей шаблона. Давайте настроим между ними взаимосвязь:</p>
21
<?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); echo $view->output();<p>В нашем примере<strong>PHP MVC</strong>отсутствует специфический функционал для контроллера, а всё потому, что в веб-приложении взаимодействия пользователя не определены. Что касается представления, то этот компонент содержит весь функционал, ведь пример предназначен только для демонстрации.</p>
21
<?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); echo $view->output();<p>В нашем примере<strong>PHP MVC</strong>отсутствует специфический функционал для контроллера, а всё потому, что в веб-приложении взаимодействия пользователя не определены. Что касается представления, то этот компонент содержит весь функционал, ведь пример предназначен только для демонстрации.</p>
22
<p>Теперь расширим PHP-пример и покажем, как будем добавлять функционал контроллера, добавляя в приложение взаимодействия:</p>
22
<p>Теперь расширим PHP-пример и покажем, как будем добавлять функционал контроллера, добавляя в приложение взаимодействия:</p>
23
<?php class Model { public $string; public function __construct(){ $this->string = “MVC + PHP = Awesome, click here!”; } } <?php 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>"; } } <?php class Controller { private $model; public function __construct($model){ $this->model = $model; } public function clicked() { $this->model->string = “Updated Data, thanks to MVC and PHP!”; } }<p>Итак, PHP-пример расширен базовым функционалом. А теперь посмотрим, как будет выглядеть настройка взаимодействий между компонентами:</p>
23
<?php class Model { public $string; public function __construct(){ $this->string = “MVC + PHP = Awesome, click here!”; } } <?php 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>"; } } <?php class Controller { private $model; public function __construct($model){ $this->model = $model; } public function clicked() { $this->model->string = “Updated Data, thanks to MVC and PHP!”; } }<p>Итак, PHP-пример расширен базовым функционалом. А теперь посмотрим, как будет выглядеть настройка взаимодействий между компонентами:</p>
24
<?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();<p>Запустив код, при нажатии на ссылку вы увидите строку, предназначенную для изменения данных.</p>
24
<?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();<p>Запустив код, при нажатии на ссылку вы увидите строку, предназначенную для изменения данных.</p>
25
<p>Таким образом, можно сказать, что мы ознакомились с базовой теорией модели MVC, реализовав с его помощью простого PHP-приложения.</p>
25
<p>Таким образом, можно сказать, что мы ознакомились с базовой теорией модели MVC, реализовав с его помощью простого PHP-приложения.</p>
26
<p>Материал подготовлен специально для OTUS на основе статьи "The MVC Pattern and PHP. Part 1".</p>
26
<p>Материал подготовлен специально для OTUS на основе статьи "The MVC Pattern and PHP. Part 1".</p>
27
<p><em>Хотите знать больше? Записывайтесь на курс "Backend-разработчик на PHP"!</em></p>
27
<p><em>Хотите знать больше? Записывайтесь на курс "Backend-разработчик на PHP"!</em></p>
28
28