Estuve hablando hoy con un colega mío sobre los marcos web de Python y nuestras impresiones sobre ellos. Le dije que creo que Flask tiene una solicitud global que huele mal y es un antipatrón.
Los documentos dicen sobre el contexto de la solicitud:
Por el contrario, durante el manejo de solicitudes, existen otras dos reglas:
- Mientras una solicitud está activa, los objetos locales de contexto (flask.request y otros) apuntan a la solicitud actual.
- cualquier código puede obtener estos objetos en cualquier momento.
Creo que entiendo la idea detrás de esta decisión de diseño: simplificar la aplicación. Es solo un compromiso, como en el caso de Thread Locals :
Sí, por lo general, no es una idea tan brillante usar hilos locales. Causan problemas para los servidores que no se basan en el concepto de subprocesos y hacen que las aplicaciones grandes sean más difíciles de mantener. Sin embargo, Flask no está diseñado para aplicaciones grandes o servidores asíncronos. Flask quiere que sea rápido y fácil escribir una aplicación web tradicional.
¿El parchear un objeto global con la información de solicitud actual es un antipatrón?
Creo que es, porque es para el analizador de código estático un estado global, aunque no lo es. Y como programador no entenderé cómo funciona sin leer los documentos detenidamente. Y esto tiene consecuencias en las pruebas .
¿No es una buena práctica pasar la solicitud como argumento a las vistas? Creo que es más legible, explícito y más fácil de depurar. Y evita el estado global.