Oggi stavo parlando con un mio collega dei framework Web Python e delle nostre impressioni su di essi. Gli ho detto che penso che Flask abbia una richiesta globale ha un cattivo odore ed è un anti-schema.
I documenti dicono sul contesto della richiesta:
Al contrario, durante la gestione delle richieste, esistono un paio di altre regole:
- mentre una richiesta è attiva, gli oggetti locali di contesto (flask.request e altri) puntano alla richiesta corrente.
- qualsiasi codice può ottenere questi oggetti in qualsiasi momento.
Penso di aver compreso l'idea alla base di questa decisione di progettazione: rendere l'applicazione più semplice. È solo un compromesso, come nel caso dei locali dei thread :
Sì, di solito non è un'idea così brillante usare i locali dei thread. Causano problemi per i server che non si basano sul concetto di thread e rendono più difficile la gestione di grandi applicazioni. Tuttavia Flask non è progettato per applicazioni di grandi dimensioni o server asincroni. Flask vuole rendere semplice e veloce la scrittura di un'applicazione web tradizionale.
Patching di un oggetto globale con le informazioni della richiesta corrente è un anti-pattern?
Credo che lo sia, perché secondo l'analizzatore di codice statico è uno stato globale, sebbene non lo sia. E come programmatore non capirò come funziona senza leggere attentamente i documenti . E questo ha conseguenze sui test .
Non è una buona pratica passare la richiesta come argomento alle viste? Penso che sia più leggibile, esplicito e più facile da eseguire il debug. Ed evita lo stato globale.