Oggi stavo parlando con un mio collega sui framework web Python e le nostre impressioni su di loro. Gli ho detto che penso che Flask avere una richiesta globale abbia un cattivo odore ed è un anti-pattern.
I documenti dicono sul contesto della richiesta:
In contrast, during request handling, a couple of other rules exist:
- while a request is active, the context local objects (flask.request and others) point to the current request.
- any code can get hold of these objects at any time.
Penso di capire l'idea alla base di questa decisione progettuale - per semplificare l'applicazione. È solo un compromesso, come nel caso di Thread locals :
Yes it is usually not such a bright idea to use thread locals. They cause troubles for servers that are not based on the concept of threads and make large applications harder to maintain. However Flask is just not designed for large applications or asynchronous servers. Flask wants to make it quick and easy to write a traditional web application.
Si sta rattoppando un oggetto globale con le informazioni sulla richiesta corrente con un anti-pattern?
Credo che lo sia, perché è nell'ottica dell'analizzatore di codici statici uno stato globale, sebbene non lo sia. E io 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 per le viste? Penso che sia più leggibile, esplicito e più facile da eseguire il debug. Ed evita lo stato globale.