Hoje eu estava conversando com um colega sobre estruturas da Web Python e nossas impressões sobre elas. Eu disse a ele que acho que o Flask com uma solicitação global cheira muito mal e é um anti-padrão.
Os documentos dizem sobre o contexto da solicitação:
Por outro lado, durante o tratamento de solicitações, existem outras regras:
- enquanto uma solicitação está ativa, os objetos locais de contexto (flask.request e outros) apontam para a solicitação atual.
- qualquer código pode se apossar desses objetos a qualquer momento.
Acho que entendo a idéia por trás dessa decisão de design - para simplificar o aplicativo. É apenas um compromisso, como no caso dos Thread Locals :
Sim, geralmente não é uma idéia tão brilhante usar os locais de threads. Eles causam problemas para servidores que não são baseados no conceito de encadeamentos e dificultam a manutenção de aplicativos grandes. No entanto, o Flask simplesmente não foi projetado para aplicativos grandes ou servidores assíncronos. O Flask deseja tornar rápido e fácil escrever um aplicativo da web tradicional.
O patch de um objeto global com as informações atuais da solicitação é um antipadrão?
Acredito que sim, porque, na visão do analisador de código estático, é um estado global, embora não seja. E eu, como programador, não vou entender como isso funciona sem ler os documentos com atenção. E isso tem consequências nos testes .
Não é uma boa prática passar a solicitação como argumento para visualizações? Eu acho que é mais legível, explícito e mais fácil de depurar. E evita o estado global.