Вопрос-ответ

Популярные вопросы с ответами для владельцев и разработчиков сайтов

Что можно назвать фреймворком?

Фреймворком (от англ. 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) — это корректно, потому что он диктует структуру тестов и вызывает ваши тестовые функции.

0363

Как понять, что перед вами фреймворк (чек-лист)

Задайте себе вопросы.

  1. Кто вызывает чей код? Если вы вызываете функции/методы инструмента — это библиотека. Если инструмент вызывает ваш код (например, через маршруты, события, хуки) — это фреймворк.
  2. Диктует ли инструмент архитектуру? Фреймворк ожидает, что вы разместите файлы в определённых папках (контроллеры, модели, представления). Библиотеку можно положить куда угодно.
  3. Можно ли легко заменить его часть? В фреймворке сложно заменить один компонент (например, ORM) на другой, не переписывая половину кода. В библиотеке — легко.
  4. Есть ли «скелет» приложения? Фреймворк предоставляет заготовку проекта (пустые папки, базовые классы). Библиотека — нет.

Например, Django (Python) — фреймворк: он создаёт структуру проекта (django-admin startproject), диктует, где хранить шаблоны, модели, и вызывает ваши view-функции по маршрутам.

NumPy (Python) — библиотека: вы вызываете np.array() сами.

Мифы о фреймворках

  • Миф: «Фреймворк — это большой набор библиотек». Не совсем. Фреймворк включает библиотеки, но дополнительно связывает их воедино и диктует архитектуру.
  • Миф: «Фреймворк сложнее библиотеки». Часто да, потому что нужно выучить конвенции и структуру, но для больших проектов фреймворк упрощает жизнь.
  • Миф: «Все фреймворки одинаковы». Нет, они отличаются подходом (монолитные / микро, active record / data mapper, шаблонизаторы и т.д.).

Резюме от эксперта

Фреймворк — это «перевёрнутый» мир программирования: вы не управляете потоком, вы лишь предоставляете детали в заранее определённые места. Именно инверсия управления отличает фреймворк от библиотеки и CMS. Если вы изучаете веб-разработку, освоение одного из популярных фреймворков (Laravel, Symfony, Django) — важный этап после изучения языка. Но не путайте фреймворк с CMS (Joomla) или конструктором. Помните: фреймворк требует написания кода, но взамен даёт гибкость и масштабируемость.