Thread Einfache Alternative zu Catalyst (36 answers)
Opened by Froschpopo at 2010-02-15 22:53

sid burn
 2010-02-16 12:16
#133089 #133089
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Einiges hat pq ja schon gesagt, wenn du eine persistente Umgebung nutzt dann spielt die menge an Module eigentlich wenig eine Rolle, da sie nur einmal geladen/kompiliert werden. Sie brauchen zwar persistent speicher, ist aber bei CGI nicht anders.

Ansonsten schreibst du öfters das Catalyst so ein Monstrum wäre, wobei ich dir da nicht so ganz zustimmen kann. Es sieht am anfang wie ein Monstrum aus, kennst du Catalyst aber erstmal richtig, dann ist Catalyst wirklich sehr Minimal. Ich möchte dir das mal "kurz" beschreiben. Catalyst bietet dir folgende Punkte.

* Abstraktion worauf deine Webapplikation läuft (CGI, FastCGI, mod_perl, ...)
* Abstraktion der HTTP Schnitstelle
* URL-Dispatch
* Entwicklungsserver
* Eine Umgebung die es dir Erlaubt das ganze zu erweitern.

Der erste Punkt ist grundsätzlich zu empfehlen. Wenn du eine Web-Applikation schreibst würde ich diese nicht so schreiben das sie Grundsätzlich nur als CGI oder zum Beispiel unter einem Apache mit mod_perl läuft etc. Deine Web-Applikation sollte davon unabhängig entwickelt werden. So erlaubst du deinen nutzern aber auch dir selber (wenn du kein OSS entwickelst) dir in Zukunft kein weg zu verbauen und kannst deine Applikation in jeder Umgebung auch neure die derzeit noch nicht existieren laufen zu lassen und bist auch unabhängig davon welchen Webserver etc. du nutzt. Grundsätzlich ist dieser Schritt defenitiv zu empfehlen. Wenn du das nicht machst musst du das selber alles Programmieren was defenitiv nicht gerade einfach ist. Catalyst bietet dir bereits diese Abstraktion. Hierbei möchte ich aber erwähnen das Catalyst primär für persistente Umgebungen entwickelt wurde. Du kannst es zwar z.B. unter der CGI Schnittstelle laufen lassen, empfehlenswert ist das aber nicht. Ansonsten existiert mitlerweile PSGI/Plack das dir ebenfalls diese Abstraktion anbietet. Aber eben nur diese Abstraktion. Diese Abstraktion ist aber primär dafür gedacht wenn du zum Beispiel selber ein Framework entwickelst.

Als nächstes bietet es die Abstraktion der HTTP Schnitstelle. Wenn du bereits CGI Applikationen geschrieben hast, hast du ebenfalls schon solch eine Abstraktion genutzt. Nämlich das Modul CGI ist solch eine Abstraktion. Anstatt selber die URL auseinander zu nehmen um z.B. die GET oder POST Parameter auszulesen nutzt du das CGI Modul das dir das anbietet. Einziger Unterschied ist nur das Catalyst sein eigenes Modul dafür hat und nicht CGI nutzt. Grundsätzlich möchtest du soetwas aber ebenfalls haben und das Rad nicht neu entwickeln.

Als nächstes kommt der URL-Dispatch. Wenn du mal selber CGI Skripte geschrieben hast wirst du sicherlich wissen das es schlecht ist alles in ein Mega Skript zu schreiben, sondern du wirst anfangen deinen Code irgendwie zu untertteilen, nämlich in Subroutinen etc. CGI::Application bietet dir soetwas schon an da du meist ein "action" parameter definierst. Das heißt du sagst welcher GET Parameter genommen werden soll der deine Subroutine dann aufruft. Nutzt du pur das CGI Modul musst du so ein Dispatch Quasi selber schreiben. Catalyst bietet dir solch einen Dispatch auch an aber weitaus mächtiger. Ich würde sogar sagen das dies das Herz von Catalyst ist. Du kannst auf etlichen Wegen deine URLs definieren und bestimmen wann und welches Modul/Subroutine etc. aufgerufen werden. Es bietet dir Chains an. Ansonsten was auch sehr wichtig ist das es "schöne" URLs anbietet. Bei heutigen Web-Anwendungen finde ich "schöne" URLs wichtig, daher zum Beispiel URLs wie "www.example.org/forum/allgemeines/topic/habe_eine_frage/post/20" anstatt zum beispiel "www.example.org/cgi-bin/foum.pl?forum=allgemeines&topic=habe_eine_frage&post=20". Mit Catalyst ist soetwas sehr simpel aufgebaut und die "chaining" fähigkeit erlaubt es dir auch vernünftig das du Subroutinen wiederverwenden kannst. Du kannst soetwas auch ohne Catalyst machen. Zum beispiel mit mod_rewrite für Apache. Allerdiengs halte ich das für schlecht. Das bindet dich wieder an einem Webserver nämlich Apache, und jeder der deine Webapplikation nutzen möchte auch. Möchtest du einen anderen Webserver nutzen geht das solange nicht wie es auf deinen neuen Webserver nicht etwas gibt das dir das gleiche wie mod_rewrite anbietet. Um es kurz zu sagen, du bist sehr sehr unabhängig von deiner Umgebung. Was man generell sehr Positiv werten kann. Auch hier kann ich wohl sagen das ein Dispatch der URL das ist was man haben möchte. Nutzt du kein Framework endest du letztendlich sowieso damit dir dein eigenen Dispatch zu schreiben. Warum also auch hier das Rad neu entwickeln und nicht ein ausgereiftes und mächtiges System nutzen?

Ansonsten kommt der Entwicklungsserver. Wie der Name es sagt ist dieser für die Entwicklung gedacht. Es gibt aber ebenfalls Server für Catalyst die du auch in einer Produktiven Umgebung nutzen kannst. Grundsätzlich ist das ebenfalls sehr zu empfehlen. Du kannst einfach ein Projekt erstellen und sofort Loslegen mit der Entwicklung, du musst dich nicht drum kümmern erst eine Vollständige Webserverumgebung aufzusetzen. Auch wenn du mehrere Webprojekte hast musst du sonst eine Virtual Host umgebung konfigurieren etc. Das entfällt alles beim Entwicklungsserver. Für die Entwicklung ist es auch besonders hilfreich wenn Fehler nicht in einer Log Datei landen sondern wenn Fehler im Browser erscheinen. Catalyst bietet dir das gleich mit einem Plugin an "StackTrace". Ansonsten kannst du das ganz auch komfortabel ein/ausschalten. Zum Beispiel möchtest du ja nicht im Produktivbetrieb das dort solch ein Fehler erscheint sondern nur in der Entwicklung. Weiterhin möchtest du wenn du Sourcecode bearbeitest auch nicht ständig manuell den Webserver neu starten. Der Entwicklungsserver bietet gleich eine Option "-r" womit er das automatisch macht. Woanders musst du entweder manuell neu starten oder soetwas erst konfigurieren damit es passiert. Der Entwicklungsserver ist also wirklich purer Komfort, aber darauf verzichten würde ich nicht mehr.

Und zu guter Letzt ist Catalyst so geschrieben das du dich überall mit Hooks einklinken kannst. Womit du catalyst erweitern kannst. Allerdiengs gibt es bereits sehr viele Fertige Plugins womit das oft wegfällt. Nehmen wir als Beispiel du möchtest das alles gzip Komprimiert wird, aber nur wenn der anfragende Webbrowser es auch unterstützt? Dann lade einfach "Catalyst::Plugin::Compress::Gzip" und das war es. Generell ist dies immer gut wenn etwas soweit offen ist das du etwas deinen bedürfnissen anpassen kannst. Catalyst bietet dir eine Solide Grundbasis dafür.


Ansonsten hört sich das viel an, ist es aber nicht. Catalyst bietet dir weder ein Session Handling an, weder Authentifizierung/Autorisierung. Es erfordert keine Datenbank noch bevorzugt es irgendeine Datenbank, das gleiche gilt für das Templating. Es wird kein Template System vorrausgesetzt noch ist irgendeins integriert oder bevorzugt. Kurz gesagt, Catalyst bietet dir nur die absolute Basis die du ohnehin für jede Webapplikation benötigst. Das ist eine Aufteilung von MVC das dir erlaubt gleich sauber zu entwickeln und eine Abstraktion von HTTP um auf nötige Sachen zuzugreifen die du ohnehin benötigst. Weiterhin die handhabung von URLs das du typischerweise in einer Webapplikation auch benötigst.

Catalyst selber ist wenn ich es so sagen sollte, ein absolutes Minimalsystem und weit davon entfernt ein "mamutprojekt" zu sein. Ein Mamutprojekt wäre z.B. eher "Jifty". Das bereits alles enthält, von der Datenbankabstraktion zum Templating System etc. Wenn dir dann irgendeine vorgabe im System nicht gefällt, tjo vielleicht kannst du es ändern, notfalls hast du pech.

Catalyst selber wird zwar oft in der Kombination Catalyst + DBIx::Class + Template eingesetzt ist aber keine vorraussetzung. Und wenn du mit dieser Kombination Catalyst lernst du praktisch zu 90% eher DBIx::Class, Template oder die diversen Plugins kennen.


Von daher würde ich dir schon ein Framework nahelegen das dir eine ähnliche Abstraktion anbietet. Catalyst halte ich selber für eine gute wahl, aber es gibt auch andere Frameworks. Auf "http://plackperl.org/" werden unter "Frameworks" einige genannt.

Ansonsten bietet dir Catalyst eben genau das an. Eine Grundbasis die es erlaubt auch größere Anwendung übersichtlich zu gestalten. Allerdiengs kannst du auch in Catalyst mist verzapfen genauso wie in jedem anderen Framework auch, oder eben ohne Framework.

Ansonsten ist nichts kostenlos im Leben, du kannst keine riesen Abstraktion erwarten das dir womöglich alles abstrahiert, sauber bei der enticklung hilft. Aber am besten noch in 3 zeilen Code geschrieben ist. Von daher nutze entweder solche Frameworks, oder lass es sein wenn du meinst das du das Rad von vorne entwickeln musst und eh alles besser machst.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Einfache Alternative zu Catalyst