HTML Diff
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 &lt;?php class Model { public $string; public function __construct(){ $this-&gt;string = "MVC + PHP = Awesome!"; } } &lt;?php class View { private $model; private $controller; public function __construct($controller,$model) { $this-&gt;controller = $controller; $this-&gt;model = $model; } public function output(){ return "&lt;p&gt;" . $this-&gt;model-&gt;string . "&lt;/p&gt;"; } } &lt;?php class Controller { private $model; public function __construct($model) { $this-&gt;model = $model; } }<p>Итак, мы имеем проект с несколькими основными классами для каждой из частей шаблона. Давайте настроим между ними взаимосвязь:</p>
20 &lt;?php class Model { public $string; public function __construct(){ $this-&gt;string = "MVC + PHP = Awesome!"; } } &lt;?php class View { private $model; private $controller; public function __construct($controller,$model) { $this-&gt;controller = $controller; $this-&gt;model = $model; } public function output(){ return "&lt;p&gt;" . $this-&gt;model-&gt;string . "&lt;/p&gt;"; } } &lt;?php class Controller { private $model; public function __construct($model) { $this-&gt;model = $model; } }<p>Итак, мы имеем проект с несколькими основными классами для каждой из частей шаблона. Давайте настроим между ними взаимосвязь:</p>
21 &lt;?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); echo $view-&gt;output();<p>В нашем примере<strong>PHP MVC</strong>отсутствует специфический функционал для контроллера, а всё потому, что в веб-приложении взаимодействия пользователя не определены. Что касается представления, то этот компонент содержит весь функционал, ведь пример предназначен только для демонстрации.</p>
21 &lt;?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); echo $view-&gt;output();<p>В нашем примере<strong>PHP MVC</strong>отсутствует специфический функционал для контроллера, а всё потому, что в веб-приложении взаимодействия пользователя не определены. Что касается представления, то этот компонент содержит весь функционал, ведь пример предназначен только для демонстрации.</p>
22 <p>Теперь расширим PHP-пример и покажем, как будем добавлять функционал контроллера, добавляя в приложение взаимодействия:</p>
22 <p>Теперь расширим PHP-пример и покажем, как будем добавлять функционал контроллера, добавляя в приложение взаимодействия:</p>
23 &lt;?php class Model { public $string; public function __construct(){ $this-&gt;string = “MVC + PHP = Awesome, click here!”; } } &lt;?php class View { private $model; private $controller; public function __construct($controller,$model) { $this-&gt;controller = $controller; $this-&gt;model = $model; } public function output() { return '&lt;p&gt;&lt;a href="mvc.php?action=clicked"' . $this-&gt;model-&gt;string . "&lt;/a&gt;&lt;/p&gt;"; } } &lt;?php class Controller { private $model; public function __construct($model){ $this-&gt;model = $model; } public function clicked() { $this-&gt;model-&gt;string = “Updated Data, thanks to MVC and PHP!”; } }<p>Итак, PHP-пример расширен базовым функционалом. А теперь посмотрим, как будет выглядеть настройка взаимодействий между компонентами:</p>
23 &lt;?php class Model { public $string; public function __construct(){ $this-&gt;string = “MVC + PHP = Awesome, click here!”; } } &lt;?php class View { private $model; private $controller; public function __construct($controller,$model) { $this-&gt;controller = $controller; $this-&gt;model = $model; } public function output() { return '&lt;p&gt;&lt;a href="mvc.php?action=clicked"' . $this-&gt;model-&gt;string . "&lt;/a&gt;&lt;/p&gt;"; } } &lt;?php class Controller { private $model; public function __construct($model){ $this-&gt;model = $model; } public function clicked() { $this-&gt;model-&gt;string = “Updated Data, thanks to MVC and PHP!”; } }<p>Итак, PHP-пример расширен базовым функционалом. А теперь посмотрим, как будет выглядеть настройка взаимодействий между компонентами:</p>
24 &lt;?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); if (isset($_GET['action']) &amp;&amp; !empty($_GET['action'])) { $controller-&gt;{$_GET['action']}(); } echo $view-&gt;output();<p>Запустив код, при нажатии на ссылку вы увидите строку, предназначенную для изменения данных.</p>
24 &lt;?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); if (isset($_GET['action']) &amp;&amp; !empty($_GET['action'])) { $controller-&gt;{$_GET['action']}(); } echo $view-&gt;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