Rozmawiałem dzisiaj z moim kolegą na temat frameworków internetowych Pythona i naszych wrażeń na ich temat. Powiedziałem mu, że myślę, że Flask, który ma globalne życzenie, źle pachnie i jest anty-wzorem.
W docs powiedzieć o kontekście żądanie:
Natomiast podczas obsługi żądań istnieje kilka innych reguł:
- gdy żądanie jest aktywne, kontekstowe obiekty lokalne (flask.request i inne) wskazują na bieżące żądanie.
- dowolny kod może uzyskać te obiekty w dowolnym momencie.
Myślę, że rozumiem ideę tej decyzji projektowej - uproszczenie aplikacji. To tylko kompromis, jak w przypadku Lokalnych wątków :
Tak, zwykle nie jest tak dobrym pomysłem stosowanie miejscowych wątków. Powodują problemy dla serwerów, które nie są oparte na koncepcji wątków i utrudniają utrzymanie dużych aplikacji. Jednak Flask po prostu nie jest przeznaczony do dużych aplikacji lub serwerów asynchronicznych. Flask chce, aby pisanie tradycyjnej aplikacji internetowej było szybkie i łatwe.
Czy łatanie obiektu globalnego informacjami o bieżącym żądaniu jest anty-wzorcem?
Wierzę, że tak jest, ponieważ zdaniem analizatora kodów statycznych jest to stan globalny, chociaż tak nie jest. A ja jako programista nie zrozumiem, jak to działa bez uważnego przeczytania dokumentacji . Ma to konsekwencje dla testów .
Czy nie jest dobrą praktyką przekazywanie żądania jako argumentu do widoków? Myślę, że jest bardziej czytelny, wyraźny i łatwiejszy do debugowania. I unika stanu globalnego.