Dekorateure vs Klassen in Python Web-Entwicklung

Ich habe drei Hauptwege bemerkt Python Web Frameworks Deal Request Handing: Dekorateure, Controller-Klassen mit Methoden für individuelle Anfragen und Anforderung Klassen mit Methoden für GET / POST.

Ich bin neugierig auf die Tugenden dieser drei Ansätze. Gibt es wesentliche Vorteile oder Nachteile eines dieser Ansätze? Um Ideen zu beheben, hier sind drei Beispiele.

Flasche verwendet Dekorateure:

@route('/') def index(): return 'Hello World!' 

Pylone verwendet Controller-Klassen:

 class HelloController(BaseController): def index(self): return 'Hello World' 

Tornado verwendet Anforderungshandler-Klassen mit Methoden für Typen:

  class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") 

Welcher Stil ist die beste Praxis?

  • Runde halb bis gleich dezimal
  • Python 3.x Rundungsverhalten
  • Warum ruft (2.49999999999999992) 3 zurück
  • Rundungsfehler in Python mit ungerader Zahl?
  • Verhalten der "runden" Funktion in Python
  • 2 Solutions collect form web for “Dekorateure vs Klassen in Python Web-Entwicklung”

    Es gibt tatsächlich einen Grund für jede der drei Methoden, die Sie aufgeführt haben, spezifisch für jedes Projekt.

    • Flasche versucht, die Dinge so einfach und unkompliziert wie möglich für den Programmierer zu halten. Mit Dekorateure für Routen muss man sich keine Sorgen um das Entwickler-Verständnis OOP machen.
    • Pylons Development Ziel ist es, Code wiederverwendbar und einfach in WSGI-Stil HTTP-Prozess-Routing integriert werden. Als solche haben sie eine sehr OOP-Art der Organisation von Routen gewählt. Als Beispiel können Sie kopieren und einfügen HelloController in jede Pylons App und es sollte nur magisch arbeiten. Auch wenn die App über WSGI in komplizierter Weise serviert wird.
    • Tornado hat noch einen anderen Grund, Dinge so zu tun, wie es tut: Tornados epollbasierter IOLoop (in Verbindung mit tornado.web.Application) instanziiert jeden RequestHandler, wenn Anfragen kommen. Indem jeder RequestHandler auf einen bestimmten GET oder POST beschränkt ist, erlaubt dies IOLoop Um schnell die Klasse zu instanziieren, die Anforderung zu verarbeiten, und schließlich lasse es Müll gesammelt werden. Dies hält es schnell und effizient mit einem kleinen Speicherplatz, unabhängig davon, wie viele RequestHandlers Ihre Anwendung hat. Dies ist auch der Grund, warum Tornado so viele weitere gleichzeitige Anfragen verarbeiten kann als andere Python-basierte Webserver (jede Anfrage bekommt eine eigene Instanz).

    Nun, nachdem du gesagt hast, dass du wissen solltest, dass du das Standard-Framework-Verhalten immer überschreiben kannst. Zum Beispiel habe ich einen MethodDispatcher für Tornado geschrieben, der es macht, dass es eher wie Pylons funktioniert (gut, ich hatte CherryPy im Kopf, als ich es schrieb). Es verlangsamt Tornado eine winzige Menge (und erhöht die Speicher-Fußabdruck leicht) aufgrund einer großen RequestHandler (im Gegensatz zu vielen kleinen), aber es kann die Menge an Code in Ihrer App reduzieren und machen es ein wenig leichter zu lesen (In meiner voreingenommenen Meinung, natürlich =).

    Die verschiedenen Frameworks versuchen, die beste Leistung durch den besten Code (zum Schreiben und Lesen) zu erreichen. Sie nehmen jeweils verschiedene Strategien an, die auf oder um MVC oder MVT basieren.

    Was du fokussierst, wird wohl nach persönlichem Geschmack kommen. Und so wird meine Antwort. Ich versuche sehr hart, irgendeinen heiligen Krieg zu vermeiden, weil es möglicherweise gültige technische Argumente gibt, die ich einfach nicht kenne.

    Aber ich persönlich bevorzuge es, das Routing von der Steuerung getrennt zu halten (djangos Ansicht) und das Template getrennt davon. Es macht Reusing-Controller wirklich einfach. Ja, ich bin ein Django-User.

    Als solches bin ich wirklich nicht ein großer Fan von Bottle's Dekorateure oder Wrapping Dinge in großen großen Hulking Klassen. Ich pflegte, als ich ein ASP.NET dev war, aber Django setzte mich frei.

    Python ist die beste Programmiersprache der Welt.