Когда программист пишет код, рано или поздно он начинает замечать, что некоторые последовательности операций повторяются в разных частях программы. Например, удаление из строки лишних символов может применяться как при работе с базой данных, так и при обработке пользовательских запросов. Естественным образом возникает желание избавиться от необходимости писать один и тот же код повторно.
Зарождение идеи
Так появились первые функции, а чуть позже — и классы с их методами (ООП). Однако они выполняли какое-то небольшое действие, хотя и очень полезное. По мере усложнения программ программисты начали сталкиваться с новой закономерностью. У них имелись функции, решающие конкретные задачи, но чтобы выполнить одну большую и целостную задачу (регистрация пользователя, рассылка писем и пр.), нужна была совокупность таких функций, помещенных в некую логическую цепочку. И вот такие цепочки так же стали повторяться.
Возникла идея создать настраиваемый каркас приложения, используя который можно было бы удовлетворить потребности большинства веб-проектов. Ведь если подумать, то зачем писать логику обработки HTML-формы, если она уже кем-то написана, подготовлена к удобному использованию и протестирована тысячами пользователей. Так что фреймворки стали разрастаться повсюду, перенимая друг у друга эффективные приемы и лучшие практики.
Фреймворк — это готовый каркас вашего приложения, который нужно просто использовать и расширять. Скорее всего, ваш будущий сайт будет выполнять какие-то стандартные действия (общение с базой данных, формирование HTML-страницы, кэширование и пр.). Так почему бы не воспользоваться готовым решением?
В двух словах про MVC
Почти все PHP-фреймворки реализуют шаблон MVC (Модель-Вид-Контроллер). Эта парадигма диктует, что разделение приложения на независимые составляющие снижает расходы на дальнейшее его сопровождение. Другими словами, MVC не дает вашему приложению выйти из под контроля. Как это работает?
Модель. Это простой класс, который отвечает за работу с данными и может содержать бизнес-логику приложения. Модель обменивается данными с базой, она знает, как и какие данные нужно получать, но она ничего не знает о том, как эти данные отображать и кто их запросил.
Контроллер. Это такой же класс, только работает он с запросами пользователя ($_GET, $_POST, $_SESSION и пр.). Любые запросы от клиента вначале обрабатываются в контроллере. Здесь, в зависимости от того, какие данные клиент запросил, вызывается метод определенной модели, который извлекает данные из базы и возвращает их набор. Полученные данные контроллер перенаправляет в Вид, чтобы их отобразить.
Вид. Представляет собой HTML-разметку со вставками PHP-кода. Вид получает обычный PHP-массив с данными, которые вставляются в HTML-теги. Массив может быть и в формате JSON, который обрабатывается при помощи JavaScript.
Все три составляющие MVC независимы друг от друга. Несмотря на то, что Контроллер является неким связующим звеном между Моделью и Видом, технически он может работать и без них. Например, код извлечения данных из базы можно поместить непосредственно в Контроллер, избегая услуг модели, а затем полученный массив данных вернуть в формате строки JSON. Таким образом, пользователь, перейдя по ссылке «/blog/id256», получает в свой браузер JSON-строку, из которой при помощи специальных JS-библиотек (Vue, React и др.) извлекаются данные и формируется HTML-страница.
Подводя итог. Фреймворк является почти готовым приложением, где решена большая часть необходимых задач. MVC — надежная концепция управления проектом, не дающая разработчику сбиться с толку. Создавайте свои проекты на базе MVC-фреймворков, чтобы избежать проблем в будущем. Даже если вам покажется, что для вашего сайта такая технология излишняя, не следует ей тут же пренебрегать без веских причин, ведь ваше сэкономленное время — единственно верный ориентир в правильности выбора.