Содержание
Фреймворком (от англ. framework — «каркас», «рамка») можно назвать программную платформу, которая предоставляет готовую архитектуру приложения, набор библиотек и правил, и, что самое главное, диктует поток управления (inversion of control) — то есть фреймворк вызывает ваш код, а не вы его. Фреймворк определяет, как приложение будет строиться: где писать бизнес-логику, как обрабатывать запросы, как взаимодействовать с базой данных. В отличие от библиотеки, которую вы вызываете, когда хотите, фреймворк — это активный каркас, в который вы вставляете свои детали в заранее определённые места (контроллеры, модели, представления).
Основной признак фреймворка: инверсия управления
Это самый важный критерий, позволяющий отличить фреймворк от библиотеки. Запомните простое правило:
- Библиотека: вы вызываете библиотеку (например,
axios.get('/users')). Вы контролируете поток. - Фреймворк: фреймворк вызывает вас. Вы создаёте класс/функцию, а фреймворк сам решает, когда её запустить.
Пример на PHP-фреймворке Laravel:
// Вы не вызываете этот метод. Laravel сам вызовет его, // когда пользователь перейдёт по URL /users. Route::get('/users', function() { return 'Hello, users!'; });
Вы просто описываете, что должно произойти, но не вызываете сами. Фреймворк берёт на себя весь цикл обработки запроса (загрузка конфигов, подключение БД, вызов вашего кода, отправка ответа). Это и есть инверсия управления (IoC).
Какие инструменты обычно называют фреймворками
Вот список типичных представителей.
| Тип | Примеры | Что предоставляет |
|---|---|---|
| Веб-фреймворки | Laravel, Symfony (PHP), Django (Python), Ruby on Rails, ASP.NET Core | Маршрутизацию, ORM, шаблонизацию, аутентификацию, консольные команды |
| Фронтенд-фреймворки | Angular, Vue.js (частично), Svelte (частично) | Реактивность, роутинг, управление состоянием, компонентный подход |
| Тестовые фреймворки | JUnit (Java), PyTest (Python), Jest (JavaScript) | Систему для написания и запуска тестов, ассерты, моки |
Фреймворк vs CMS: в чём разница
Многие путают фреймворки с CMS (системы управления содержимым). CMS (например, Joomla, WordPress) — это готовое приложение с админ-панелью, которое вы устанавливаете на хостинг и получаете возможность управлять контентом. CMS построена на каком-либо фреймворке (явно или неявно). Фреймворк — это инструмент для разработчика, из которого нужно собрать своё приложение (в том числе и CMS).
Пример: Drupal 8+ построен на компонентах Symfony, но сам Drupal — это CMS, а Symfony — фреймворк.
Конструкторы (SitePro.by, Tilda) — вообще не фреймворки. Это SaaS-платформы, где вы не пишете код (или пишете минимально), а перетаскиваете блоки.
Когда инструмент НЕ является фреймворком
- Библиотека: jQuery, Lodash, React (сам по себе React — библиотека, так как она не диктует архитектуру всего приложения; только в связке с React Router, Redux можно говорить о "фреймворке" неформально).
- Плагин/расширение для CMS: плагин для WordPress или компонент для Joomla — не фреймворк, а дополнение.
- IDE (среда разработки): VS Code, PhpStorm — не фреймворки, а инструменты для написания кода.
- Конструктор сайтов (SitePro.by, Tilda): не фреймворк, так как вы не пишете код, а пользуетесь визуальным редактором.
Однако терминология может размываться. Например, иногда говорят «фреймворк для тестирования» (Jest) — это корректно, потому что он диктует структуру тестов и вызывает ваши тестовые функции.

Как понять, что перед вами фреймворк (чек-лист)
Задайте себе вопросы.
- Кто вызывает чей код? Если вы вызываете функции/методы инструмента — это библиотека. Если инструмент вызывает ваш код (например, через маршруты, события, хуки) — это фреймворк.
- Диктует ли инструмент архитектуру? Фреймворк ожидает, что вы разместите файлы в определённых папках (контроллеры, модели, представления). Библиотеку можно положить куда угодно.
- Можно ли легко заменить его часть? В фреймворке сложно заменить один компонент (например, ORM) на другой, не переписывая половину кода. В библиотеке — легко.
- Есть ли «скелет» приложения? Фреймворк предоставляет заготовку проекта (пустые папки, базовые классы). Библиотека — нет.
Например, Django (Python) — фреймворк: он создаёт структуру проекта (django-admin startproject), диктует, где хранить шаблоны, модели, и вызывает ваши view-функции по маршрутам.
NumPy (Python) — библиотека: вы вызываете np.array() сами.
Мифы о фреймворках
- Миф: «Фреймворк — это большой набор библиотек». Не совсем. Фреймворк включает библиотеки, но дополнительно связывает их воедино и диктует архитектуру.
- Миф: «Фреймворк сложнее библиотеки». Часто да, потому что нужно выучить конвенции и структуру, но для больших проектов фреймворк упрощает жизнь.
- Миф: «Все фреймворки одинаковы». Нет, они отличаются подходом (монолитные / микро, active record / data mapper, шаблонизаторы и т.д.).
Резюме от эксперта
Фреймворк — это «перевёрнутый» мир программирования: вы не управляете потоком, вы лишь предоставляете детали в заранее определённые места. Именно инверсия управления отличает фреймворк от библиотеки и CMS. Если вы изучаете веб-разработку, освоение одного из популярных фреймворков (Laravel, Symfony, Django) — важный этап после изучения языка. Но не путайте фреймворк с CMS (Joomla) или конструктором. Помните: фреймворк требует написания кода, но взамен даёт гибкость и масштабируемость.