💻 ПРОГРАММИРОВАНИЕ

Библиотека и фреймворк: в чём разница и кто кого вызывает

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

Библиотека — это набор готовых инструментов, которые вы берёте по необходимости; фреймворк — это готовый каркас, в который вы встраиваете свой код.
Разница в одном вопросе: кто кого вызывает? Вашу программу — фреймворк, или ваша программа — чужой код? От ответа зависит, библиотека перед вами или фреймворк.

Никто не пишет программы целиком с нуля — это было бы безумием. Зачем заново изобретать разбор дат, работу с сетью или построение интерфейса, если умные люди уже сделали это и поделились? Так появились два способа использовать чужой код: библиотеки и фреймворки. Разберём, чем они отличаются.

Библиотека: ящик с инструментами

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

import math

# Вы зовёте библиотеку, когда вам удобно
print(math.sqrt(16))   # 4.0
print(math.pi)         # 3.14159...

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

Фреймворк: готовый каркас дома

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

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

Главное отличие: кто кого зовёт

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

Это даже сформулировали как «голливудский принцип»: не звоните нам — мы сами вам позвоним. Библиотеке звоните вы. А фреймворк звонит вам.

БиблиотекаФреймворк
Вы вызываете её кодОн вызывает ваш код
Управление у васУправление у него
Набор инструментовКаркас приложения
Берёте кусочкамиВстраиваетесь целиком

Когда что выбрать

Библиотека даёт свободу: вы строите программу как хотите и подключаете готовые куски по необходимости. Цена свободы — вы сами отвечаете за всю структуру и связки.

Фреймворк даёт скорость и порядок: множество решений уже приняты за вас, типовые задачи (маршрутизация запросов, работа с базой, безопасность) встроены. Цена — вы играете по его правилам и теряете часть гибкости. Для типового веб-приложения фреймворк сэкономит недели. Для нестандартной задачи он может, наоборот, мешать.

Граница не всегда чёткая

Честно говоря, иногда трудно сказать однозначно: вот это библиотека, а вот это фреймворк. Некоторые инструменты можно использовать и так, и эдак. Но проверочный вопрос почти всегда работает: задумайтесь, кто диктует структуру программы — вы или этот инструмент? Если вы зовёте его по мере надобности — библиотека. Если он управляет потоком, а вы лишь заполняете пропуски, — фреймворк.

Зачем понимать разницу

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

#архитектура#библиотека#как устроено#программирование#фреймворк