Я говорил сегодня с моим коллегой о веб-фреймворках Python и наших впечатлениях о них. Я сказал ему, что думаю, что у Flask глобальный запрос плохо пахнет и это анти-паттерн.
В документах говорят о контексте запроса:
Напротив, во время обработки запроса существует пара других правил:
- пока запрос активен, локальные объекты контекста (flask.request и другие) указывают на текущий запрос.
- любой код может получить доступ к этим объектам в любое время.
Я думаю, что понимаю идею этого дизайнерского решения - сделать приложение проще. Это просто компромисс, как в случае с Thread Locals :
Да, обычно не такая яркая идея использовать локальные потоки. Они создают проблемы для серверов, которые не основаны на концепции потоков и затрудняют обслуживание больших приложений. Однако Flask просто не предназначен для больших приложений или асинхронных серверов. Flask хочет быстро и легко написать традиционное веб-приложение.
Является ли исправление глобального объекта с информацией о текущем запросе антипаттерном?
Я полагаю, что это так, потому что, по мнению статического анализатора кода, это глобальное состояние, хотя это не так. И я, как программист, не пойму, как это работает, не прочитав внимательно документы . И это имеет последствия на тестах .
Разве не рекомендуется передавать запрос в качестве аргумента представлениям? Я думаю, что это более читабельно, явно и легче для отладки. И избегает глобального состояния.