Ich habe heute mit einem Kollegen über Python-Webframeworks und unsere Eindrücke darüber gesprochen. Ich sagte ihm, dass ich denke, dass Flask, der eine globale Anfrage hat, schlecht riecht und ein Anti-Muster ist.
Die Dokumente sagen über den Anforderungskontext:
Im Gegensatz dazu gibt es während der Anforderungsbearbeitung einige andere Regeln:
- Während eine Anforderung aktiv ist, verweisen die lokalen Kontextobjekte (flask.request und andere) auf die aktuelle Anforderung.
- Jeder Code kann diese Objekte jederzeit erreichen.
Ich glaube, ich verstehe die Idee hinter dieser Entwurfsentscheidung - die Anwendung zu vereinfachen. Es ist nur ein Kompromiss, wie im Fall von Thread Locals :
Ja, es ist normalerweise keine so gute Idee, Thread-Einheimische zu verwenden. Sie verursachen Probleme für Server, die nicht auf dem Konzept von Threads basieren, und erschweren die Wartung großer Anwendungen. Flask ist jedoch nicht für große Anwendungen oder asynchrone Server konzipiert. Flask möchte es schnell und einfach machen, eine herkömmliche Webanwendung zu schreiben.
Ist das Patchen eines globalen Objekts mit den aktuellen Anforderungsinformationen ein Anti-Pattern?
Ich glaube, das ist es, weil es nach Ansicht des Static Code Analyzer ein globaler Zustand ist, obwohl dies nicht der Fall ist. Und ich als Programmierer werde nicht verstehen, wie es funktioniert, ohne die Dokumente sorgfältig zu lesen . Und das hat Konsequenzen für Tests .
Ist es nicht eine gute Praxis, die Anfrage als Argument an Ansichten weiterzuleiten? Ich denke, es ist lesbarer, expliziter und einfacher zu debuggen. Und vermeidet globalen Zustand.