O que é um framework?


Digamos que você está construindo um pequeno aplicativo web: contas, um feed, uma página de configurações. Antes de qualquer ideia sua aparecer na tela, você precisa de código que transforme URLs em páginas, código que fale com um banco de dados, código que mantenha as senhas seguras, e código que redesenhe a tela quando algo muda. Nada disso é a ideia do seu app. Todo app precisa disso, e a maioria é a mesma de projeto para projeto.
Você poderia escrever toda essa encanação você mesmo, e as pessoas fizeram, por anos. É lento, é onde os bugs sutis vivem, e cada equipe acabava com uma versão ligeiramente diferente e ligeiramente quebrada da mesma maquinaria. Um framework é a resposta acumulada: a encanação compartilhada, escrita uma vez e endurecida por milhares de projetos, empacotada com uma estrutura que te diz onde seu próprio código vai. Você constrói as partes que tornam seu projeto o seu; o framework lida com as partes que todo projeto repete.
Frameworks não são uma coisa da web. Eles existem em todos os lugares onde programas são construídos, e este capítulo é sobre a ideia em si, em qualquer linguagem e qualquer campo.
O que é um framework (e o que é uma biblioteca)
A palavra é usada de forma solta, então aqui está a distinção que realmente importa, em código:
// Uma biblioteca: seu código está no comando, e chama a biblioteca quando útil.
const label = dateLibrary.format(order.createdAt, "MMM D");
// Um framework: o framework está no comando, e chama o código que você conecta.
export default function OrdersPage() {
return listOfOrders();
}A primeira linha é você direcionando: seu programa roda, e ele pede emprestada uma ferramenta para um trabalho. A segunda é diferente em tipo. Você nunca chama OrdersPage você mesmo. Você a escreve, coloca onde o framework espera, e o framework a chama no momento certo, aqui, quando um visitante abre a página de pedidos.
Esse flip tem um nome: inversão de controle. Com uma biblioteca, seu código controla o fluxo do programa e pede ferramentas emprestadas. Com um framework, o framework controla o fluxo, e seu código preenche os espaços em branco que ele deixa para você. Uma forma útil de resumir: você chama uma biblioteca; um framework chama você.
A mesma forma aparece em todos os cantos da programação. Django recebe a solicitação web e chama sua função de view. Flutter executa o app e pergunta a seus widgets o que desenhar. Unity executa o game loop e chama seus scripts a cada frame. pytest encontra suas funções de teste e as executa para você. Campos diferentes, uma ideia: o framework possui o mecanismo, e você fornece as partes para as quais foi construído.
Se uma imagem ajudar: uma biblioteca é uma caixa de ferramentas ao seu lado enquanto você constrói, e você pega uma ferramenta sempre que ela é útil. Um framework é mais como o quadro de um edifício, já de pé quando você chega. As paredes, fiação e encanação têm seus lugares, e seu trabalho vai para os quartos que tornam o edifício seu. Ambos economizam seu esforço; a diferença é quem decide a forma da construção.
O que um framework traz para você e o que custa
O caso para um framework é concreto. Problemas que levariam semanas para você resolver chegam já resolvidos, e resolvidos por pessoas que enfrentaram os casos extremos primeiro: tratamento de senhas, validação de formulários, roteamento, renderização. Seu projeto ganha uma estrutura que um colega novo pode reconhecer em minutos, porque é a mesma estrutura de todos os outros projetos nesse framework. E você herda um ecossistema: plugins, tutoriais, perguntas respondidas, e um pool de contratação de pessoas que já conhecem o caminho.
Os custos são igualmente concretos, e merecem o mesmo olhar direto. Um framework é uma grande dependência que você não controla, com seus próprios bugs, seu próprio ritmo, e suas próprias opiniões. Há uma curva de aprendizado antes de sua primeira página renderizar, e parte do que você aprende é conhecimento sobre o framework em vez de sobre programação. Seu código se dobra às suas formas, o que torna deixar mais difícil quanto mais tempo você fica. E frameworks se movem: versões principais chegam, padrões são repensados, e se manter atualizado é trabalho contínuo que você não tinha como código simples.
Nenhuma lista vence por si própria. O equilíbrio depende inteiramente do projeto, então a pergunta a fazer de qualquer framework é "este torna este projeto mais simples". Um framework merece seu lugar tornando seu projeto mais simples. Quando o faz, use-o de bom grado. Quando não, os próximos dois capítulos são sobre reconhecer isso cedo.
Para onde isso vai em seguida
Com a ideia em vigor, a próxima pergunta natural é o que está realmente aí: Os tipos de frameworks faz um tour pelas principais famílias, da web para jogos para testes, com as opções mais populares em cada. Depois disso, Escolhendo e aprendendo um framework fica prático sobre escolher um, aprender um, e saber quando você não precisa de nenhum. E se os exemplos JavaScript acima sentiram desconhecidos, o track de JavaScript cobre a própria linguagem, que é o primeiro passo certo antes de qualquer framework construído nela.

