Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
mvc [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Шаблон проектирования MVC ======
 +~~Title: MVC (Model-View-Controller) ~~
 +{{htmlmetatags>
 +metatag-description=(Шаблон проектирования Model View Controller (MVC))
 +}}
 +
 +Шаблон проектирования **MVC** (Model-View-Controller), на русском «Модель-представление-контроллер» или «Модель-представление-поведение».
 +
 +  * **Model (Модель)** - уровень абстракции, например для обработки данных из базы данных (обработанные данные передаются контроллеру). [[SQL]].
 +  * **View (Вид/Представление)** - представление данных; вывод данных конечному пользователю (браузеру). В случае вебпрограмирования - это HTML код.
 +  * **Controller (Контроллер/Поведение)** - логика работы; управление данными, генерируемыми в моделях и последующая передача их в вид. Служит "мостом" между View и Model.
 +
 +Запрос пользователя (URL)==>Контроллер==><==Модель==>Вид/Представление
 +<note warning>Главное правило View ничего не должен знать о Model. То есть нельзя делать запросы к базе данных из View.</note>
 +
 +{{ ::mvc-01.jpg?nolink&600 |}}
 +
 +  * **Представление**. Модуль вывода информации. Это может быть шаблонизатор или что-либо подобное, цель которого является только в выводе информации в виде HTML на основе каких-либо готовых данных.
 +  * **Контроллер**. Модуль управления вводом и выводом данных. Данный модуль должен следить за переданными в систему данными (через форму, строку запроса, cookie или любым другим способом) и на основе введённых данных решить:
 +          * Передавать ли их в модель
 +          * Вывести сообщение об ошибке и запросить повторный ввод (заставить модуль представление обновить страницу с учётом изменившихся условий)
 +Кроме того, контроллер обязан определять тип данных, полученных от модели (есть ли это готовый результат, отсутствие оного, либо сообщение об ошибке) и передавать информацию в модуль представления.
 +  * **Модель**. Модуль, отвечающий за непосредственный расчёт чего-либо на основе полученных от пользователя данных. Результат, полученный этим модулем, должен быть передан в контроллер, и не должен содержать ничего, относящегося к непосредственному выводу (то есть должен быть представлен во внутреннем формате приложения).
 +
 +===== Собственный PHP framework =====
 +
 +Создание собственного framework используя шаблон MVC по пунктам:
 +  * **Действия который происходят при каждом запросе пользователя**.
 +       - Создание единой точки входа для всех запросов т.е. все запросы должны обрабатываться например через index.php. Обычно делается при помощи файла .htaccess и mod_rewrite.
 +       - Создаем класс или функцию для автозагрузки наших классов.
 +       - Создаем класс для хранения глобальных настроек используя шаблон Registry.
 +       - Создаем class Router (шаблон Singlton): который содержит массив возможных страниц нашего сайта. Создаем метод getRoute который разбивает запрос пользователя ($_SERVER['REQUEST_URI']) на контроллер, действие(action) и параметры.
 +       - Создаем класс View. Метод Render
 +  * **Начинается ветвление программы**, после передачи проанализированного [[URI]] на вход классу FrontController
 +       - Реализация FrontController шаблон
 +
 +
 +Обработка запроса пользователя (действия одинаковые для всех запросов):
 +  - [[Apache]]
 +  - .[[htaccess]]
 +  - index.php
 +  - bootstrap.php - инициализация фреймверка
 +  - routes.php
 +Начинается ветвление программы
 +  - FrontController.php
  

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!