Программирование  •  19 сентября  2022  •  5 мин чтения

Для чего нужен фреймворк и как его выбрать

Разбираем, что такое фреймворк в программировании, чем он отличается от библиотеки и что у него общего с кофе из автомата.
Николай Федосеев
Яндекс Практикум
Ментор Python,
SDE в PlayCanvas
Яна Сергиенкова
Яндекс Практикум
Редактор

Что такое фреймворк

Программирование можно сравнить с творчеством. Если программист — писатель, то свой сюжет он формирует с помощью методов, классов и их взаимодействия. Спойлер: убийца — сборщик мусора.

Код можно писать по-разному: быстро или медленно, понятно и читабельно или плохо и неподдерживаемо. Это зависит от предпочтений, навыков и бэкграунда. Использование фреймворков (англ. framework — «каркас, структура») помогает уравнять эти различия. Программист использует готовые шаблоны, дополняет их своим кодом и с их помощью вносит определённую логику решения задач и проблем бизнеса.

Представим, что нужно построить здание или корабль. Это трудно сделать так, чтобы вместо дома не получился шалаш, а вместо корабля — плот. В случае с кораблём фреймворк — это каркас, а с домом — фундамент. Фреймворк описывает начальную заготовку и свод инструкций, которые упрощают достижение конечной цели: каркас корабля и фундамент дома достроить проще, чем собирать с нуля.

Фреймворки в программировании подходят для решения многих задач: создания интернет-магазинов, блогов, приложений с множеством тысяч активных пользователей. Любая CMS-система — это фреймворк, который достаточно наполнить контентом, и простой интернет-магазин готов.

При разработке фреймворка программист учитывает его структуру и ограничения. Во фреймворке есть реализованные классы, предопределённые переменные, константы и готовые решения отдельных функциональностей: валидация запросов, работа с БД, авторизация, работа с формами. Как в тетрисе, во фреймворке нужно взять нужные блоки, связать их и использовать.

Структура фреймворка FastAPI
Возможная структура проекта на основе FastAPI

Зачем нужны фреймворки

Фреймворки подходят для решения многих задач: автоматизации, создания MVP (англ. minimum viable product — «минимально жизнеспособный продукт») или проверки идей. Обычно перед программистом стоят следующие задачи: уменьшить время разработки и последующей поддержки, обеспечить стабильность и защищённость приложения. Во всех этих случаях фреймворк приходит на помощь: он протестирован, позволяет решать любую бизнес-задачу и выдерживать большие нагрузки. В отличие от CMS, фреймворк — это низкоуровневое решение, то есть он содержит некоторый базовый функционал, и многие компоненты придётся дорабатывать вручную.

Для чего нужен фреймворк:

Увеличить скорость разработки.
За счёт переиспользования готовых модулей фреймворк уменьшает время релиза новой функции и разработки сервиса или приложения. Если бы пришлось разрабатывать с нуля, то затраченное время было бы колоссальным.

Это полезная функция для начинающих программистов. Если использовать готовый шаблон, лишь дополняя или связывая некоторые функциональные блоки, и наполнять его контентом, это уменьшает шансы ошибиться. На выходе получается «чистый» код, отвечающий стандартам разработки.

Упростить работу.
Фреймворки похожи, поэтому программист сможет разобраться с любым проектом, созданным на базе фреймворка, если ранее работал с ним или с другим аналогичным.

Обычно фреймворк — это open-source-проект, то есть если чего-то не хватает, то всегда можно дополнить, а сообщество специалистов поможет советом. Над открытым проектом работают, например, в системах хранения GitHub или GitLab, и здесь нет каких-то строгих правил — дополнять и улучшать фреймворк может любой специалист.

Обеспечить безопасность.
Фреймворки защищены и протестированы. Самые распространённые уязвимости или способы получения конфиденциальных данных — SQL-инъекции, XSS-атаки, SSRF, брутфорс — учтены и не представляют угрозы. По уровню безопасности фреймворки превосходят самописные решения и помогают обезопасить приложения от взлома.

Разница между фреймворком и библиотекой

Библиотека — это набор модулей или функционала, который упрощает разработку. Например, в рамках языка Python есть библиотеки, работающие с базами данных для рендеринга веб-страниц или для тестирования. Разработчик встраивает библиотеку в свой код, и она становится его частью. Библиотека не влияет на архитектуру проекта и не задаёт ограничений.

При использовании фреймворка код встраивается в заранее заложенную структуру приложения и дополняет каркас за счёт переиспользования готовых модулей.

Фреймворки часто содержат в себе другие библиотеки. Если библиотека реализована на одном языке программирования, то различные блоки фреймворка могут быть созданы с использованием многих технологий, как монстр Франкенштейна, созданный из разных частей
К примеру, основные библиотеки Python написаны на С, но это не мешает добавить во фреймворк кусочки кода на Java, Go, Rust. Из-за того, что этo компилируемые языки, работать они будут быстрее стандартных реализаций.

Узнать больше о том, чем отличается фреймворк от библиотеки, можно на курсе «Python-разработчик». Студенты работают с веб-фреймворком Django, учатся создавать веб-страницы и писать автоматические тесты для своих программ.

Узнайте, каково быть разработчиком
Пройдите бесплатную вводную часть курса «Python-разработчик» и попробуйте себя в новой роли. Вдруг понравится?

Типы фреймворков

Фреймворки разделяют по типу задач, которые они решают:

1. Фронтенд-фреймворки

Отвечают за внешний вид проекта и работают в браузере. С их помощью можно создавать удобные пользовательские интерфейсы, добавлять анимацию, адаптировать сайты для разных устройств, чтобы страница выглядела одинаково хорошо на планшете, телефоне, экране компьютера, телевизора или игровой приставке. Примеры фронтенд-фреймворков, написанных на JavaScript: React, Vue, Angular.

2. Бэкенд-фреймворки

Отвечают за возможность хранения, обработки и анализа больших массивов данных из различных баз данных и за работоспособность сайта или приложения, которые с ними работают.

Наиболее популярные фреймворки на Python для бэкенда:

● Django,

● Flask,

● FastAPI.

С помощью серверных фреймворков не получится разработать веб-приложение с поддержкой сложных интерфейсов, потому что они ограничены в своей функциональности. Зато есть возможность создавать статичные сайты или передавать нужные данные из БД для обработки на стороне веб-фреймворка.

3. Кроссплатформенные фреймворки

Кроссплатформенность позволяет запускать исходный код на различных операционных системах (Windows, Linux, macOS) или платформах (в вебе, на десктопных или мобильных устройствах).

Кроссплатформенные фреймворки имеют преимущества и недостатки: выигрывая в скорости разработки по сравнению с нативным решением, приходится жертвовать качеством и скоростью работы. Эти фреймворки могут быть сложными для начинающих.

К кроссплатформенным фреймворкам относятся:

● Kivy (Python);

● React Native (JavaScript);

● Electron (JavaScript);

● Flutter (Dart);

● Xamarin (C#).

Фреймворки делят по типу выполнения задач на синхронные и асинхронные.
В синхронных необходимо дождаться ответа: выполнение следующей операции или задачи блокируется до момента, пока не будет завершена предыдущая. У асинхронных не нужно ждать завершения команд — программа продолжает своё выполнение.

Поведение фреймворков можно сравнить с перепиской в почте, когда отправитель не ждёт мгновенного ответа, а продолжает заниматься другими делами. К синхронным относятся фреймворки Flask, Bottle, Pyramid, Django (асинхронность для запросов и асинхронный ORM появились только в версии 4.1), к асинхронным — Tornado, Starlette, Sanic, FastAPI.

Архитектура фреймворков

Фреймворки реализуют одну общую архитектуру Model–View–Controller, или MVC. Она подразумевает такое разделение структуры приложения, когда различные блоки отвечают за работу с данными, их отображение и бизнес-логику их взаимодействия.

Модель (Model) — этот блок отвечает за доступ к данным из базы, файлов или иных облачных сервисов. Например, при создании To-Do-приложения код компонента Model будет хранить список всех задач, информацию об отдельных задачах, различные статусы их изменения или некоторые комментарии.

Отображение (View) — определяет взаимодействие с пользователем. Код компонента отвечает за отображение данных, например, через шаблон, веб-страницу или экран телефона. От него зависит внешний вид и возможные действия.

Контроллер (Controller) — занимается связкой двух предыдущих сущностей, чтобы данные из хранилища передавались в отображение. Код и логика компонента проверяют, как сайт реагирует на действия пользователей: обрабатывает запросы и выдаёт результат.

Модель MVC используется во всех веб-фреймворках
Разберём MVC в действии на примере вендингового аппарата. Место действия — автомобильная заправка. Водитель решает взбодриться перед долгой дорогой и выпить кофе из автомата. Чтобы получить стаканчик эспрессо, покупатель совершает несколько операций: регулирует количество сахара, выбирает напиток, оплачивает заказ. После оплаты вендинговый аппарат «оживает» и приступает к работе. Когда кофе будет готов, на экране появится уведомление, что его можно забрать.

Покупка кофе через MVC:

Модель: ингредиенты для приготовления напитка.
Контроллер: вендинговый аппарат, приготовивший напиток.
Отображение: чашка горячего эспрессо.

Как выбрать фреймворк в веб-разработке

Фреймворков много, поэтому начинающему разработчику легко запутаться. При выборе инструмента нужно обратить внимание на следующие критерии:

Скорость разработки и уровень вхождения.
Главный критерий в разработке — это время. Наличие встроенных пакетов и готовых модулей упрощает и уменьшает время на разработку. Плюсом будет, если фреймворк содержит функциональность AAA (авторизации и аутентификации), ORM или SQL-генераторы для работы с базами данных, middleware для работы с cookie, запросами и ответами.

Большинство фреймворков хорошо документированы и содержат все необходимые подсказки по быстрому старту и использованию. Всегда можно обратиться за помощью к IT-сообществу. В программировании, скорее всего, уже кто-то сталкивался с данной проблемой или вопросом, поэтому можно поискать ответ на свой вопрос.

Масштабируемость и последующая поддержка.
Периодически приложение нужно масштабировать из-за различных факторов: роста числа пользователей и увеличения нагрузки, в рамках A/B-тестов при улучшении и доработке сервисов, необходимости использования других серверов, хранилищ или облачных решений.

Если изначально кодовая база и архитектура фреймворка предполагают малую связность модулей друг с другом, то масштабирование не вызовет проблем и не займёт много времени.

Производительность и популярность.
Важным критерием при выборе фреймворка является его производительность. Она определяет количество запросов, которые приложение на основе фреймворка может обработать в единицу времени, или RPS (от англ. Requests Per Second).

С рейтингом производительности фреймворков можно ознакомиться на TechEmpower

Решающим фактором для выбора фреймворка становится его популярность среди опытных программистов. Например, в Python популярен Django из-за своей простоты. Его архитектура позволяет быстро разрабатывать бэкенд для приложений, и есть графический интерфейс взаимодействия с БД, для которого не нужно отдельно писать код.

Django изначально был создан для отображения новостной ленты, поэтому на нём легко создать личный блог и быстро наполнить его контентом. Всё уже готово к запуску — достаточно выполнить пару команд, и проект запущен:

django-admin startproject my-blog
python my-blog/manage.py migrate
python my-blog/manage.py runserver localhost:8080

Посмотреть данные ежегодного опроса опытных разработчиков можно на портале Stack Overflow.

Популярные фреймворки для разработки на Python

Как научиться пользоваться фреймворками

Архитектура и структура практически всех фреймворков одинаковы: можно разобраться в работе одного, чтобы понять, как работать с другими. Это можно сделать самостоятельно: попробовать написать небольшой проект вроде To-Do-приложения, создать планировщик или календарь, систему ведения бюджета, небольшой интернет-магазин, бот в телеграме. Главное — взяться за проект, который интересен, или рутинную задачу, которая отнимает много времени и потому требует автоматизации.

Другие варианты практики:

Обучающие курсы.
Этот вариант поможет освоить азы, структурировать информацию и понять, как работает фреймворк. Выбор языка или технологии не столь важен — фреймворки есть в каждом. Нет смысла изучать фреймворк, если непонятны особенности языка, на котором он написан. Поэтому сначала нужно разобраться в синтаксическом сахаре — командах, операциях, функциях, а затем в работе с памятью, стандартными библиотеками и сборщиком мусора.

Начинающим будет полезно разобраться в Computer Science: как работает компьютер и сеть, какие языки программирования бывают и какая между ними разница, как работать с базами данных, пользоваться консолью, деплоить приложения.

Митапы.
Это неформальная встреча, где обсуждаются проблемы, с которыми IT-специалисты сталкиваются на работе, обмениваются опытом их решения, сравнивают альтернативные варианты или новые подходы, технологии, фреймворки и языки. Начинающему специалисту полезно отслеживать похожие встречи в своём городе. Многие крупные компании и веб-студии проводят митапы.

Хакатоны.
Это соревнование, где за короткий срок нужно решить задачу для бизнеса или разработать прототип продукта. Интересная практика для продолжающих, с реальными проектами. Здесь можно окунуться в дух стартапа, где приходится работать в режиме нон-стоп, есть много фастфуда, пить энергетики и где все вокруг пытаются изменить мир или сделать его немного лучше. Отличительной чертой хакатонов является нетворкинг, знакомство с жюри, возможность получить оффер или выиграть денежный приз, получить гонорар на последующую доработку решения.

В самом начале пути лучше попробовать обойтись без фреймворка: написать код с нуля и только потом использовать фреймворк, чтобы проверить и сравнить, как реализованы различные блоки приложения, провести работу над ошибками.

Советы эксперта для начинающих программистов

1. Полюбить «Банду четырёх».
Так принято называть авторов книги «Приёмы объектно-ориентированного проектирования. Паттерны проектирования». Прочесть её для понимания SOLID и паттернов программирования, которые помогают писать понятный и поддерживаемый код — обязательное требование для разработчика в любой компании.

2. Быть в тренде.
Языки, как и технологии, очень динамичны. Чтобы не пропустить новую технологию или тренд, придётся много читать и фильтровать терабайты информации. Эффективный, но пассивный вариант — подписаться на еженедельную рассылку по нужному языку или технологии. Достаточно ввести в поисковике название языка или фреймворка с приставкой weekly, например python weekly. И следить, как он развивается. Для чтения статей подойдёт Habr, Medium или Яндекс Практикум, для общения — Reddit. Отличные учителя — документация и репозитории с открытым кодом на GitHub/GitLab.

3. Осваивать теорию и практиковать.
Расширять область знаний в ширину: например, изучать Computer Science, сеть, базы данных, шифрование. Улучшать свои познания в глубину: разбираться в особенностях языков программирования, реализации стандартных пакетов и библиотек или фреймворков. Теорию закреплять практикой.

Узнайте, каково быть разработчиком
Пройдите бесплатную вводную часть курса «Python-разработчик» и попробуйте себя в новой роли. Вдруг понравится?
Поделиться
Wed Sep 21 2022 23:59:04 GMT+0300 (Moscow Standard Time)