Hallo,
in der letzten Zeit habe ich versucht, mit Spring MVC eine Webanwendung zu entwickeln. Die Architektur und Flexibiliät von Spring MVC gefällt mir auch, aber trotzdem werde ich nicht so richtig warm mit diesem Framework. Immer wieder stehe ich vor Problemen und weiß nicht weiter, irgendwann habe ich bisher (bis auf das letzte Problem) immer eine Lösung gefunden, aber ich habe das Gefühl, dass ich mich mehr mit dem Framework als mit der eigentlichen Aufgabe befasse. So langsam reift bei mir die Erkenntnis, dass ich mit Spring MVC einfach nicht glücklich werde.
Die Frage ist nur: Was dann?
Folgende Anforderungen habe ich an ein Webframework:
* Bindung übergebener Daten an beliebige POJOs
* Validierung, anschließende Anzeige von Eingabefehlern sollte einfach sein
* Unterstützung für Internationalisierung
* URLs sollten weitgehend nach eigenem Geschmack auf Controller und Methoden abgebildet werden können. URLs sollten auch nach bestimmten Nutzeraktionen noch als Lesezeichen taugen.
* So wenig externe (XML-)Konfiguration wie möglich
* Unterstützung von Datei-Uploads
* Saubere Trennung von Programmlogik und HTML
* Erweiterbar
* Einfache Dinge sollten auch einfach umsetzbar sein.
* Framework sollte nicht fest an ein Build-System wie Maven gekoppelt sein.
* HTML-Seiten sollten ohne JSF und möglichst auch ohne JSP erzeugt werden können (FreeMarker gefällt mir besser).
* Erzeugte Seiten sollen prinzipiell auch ohne JavaScript funktionieren.
* Die Zukunft des Frameworks sollt einigermaßen gesichert sein.
Ich habe mich durch diverse Seiten im Web gewühlt und folgende Eindrücke von verschiedenen Frameworks gewonnen:
Spring MVC
----------
pro
* saubere Architektur
* Sehr flexibel und gut erweiterbar
kontra
* relativ viel Konfiguration
* Ich stehe immer wieder vor rätselhaften Problemen und werde mit dem Framework einfach nicht warm.
Wicket
------
pro
* HTML-Komponenten werden in Java gesteuert
* Mehr Web-Funktionen sind standardmäßig enthalten (Stichwort Hochladen von Dateien)
* keine Annotationen notwendig
* Pures Java, keine XML-Konfiguration
* Pure HTML-Vorlagen
kontra
* höherer Speicherbedarf, dadurch dass der Status der Anwendung je Nutzer gespeichert wird
* hoher Lernaufwand (http://entwickler.de/zonen/portale/psecom,id,101,online,1301,.html)
* hässliche URLs, die an eine Sitzung gebunden werden
Tapestry
--------
pro
* wahrscheinlich performanter als Wicket
kontra:
* soll komplexer/schwerer erlernbar als Wicket sein
* XML-lastig
* schlecht dokumentiert
* Schwer testbar, weil man teilweise zu abstrakten Klassen gezwungen wird. (http://www.infoq.com/news/2006/12/wicket-vs-springmvc-and-jsf)
Struts 2
--------
pro
* scheint relativ geradlinig zu sein, wenn man mal von der XML-Programmierung absieht.
kontra
* Umständliche Bindung der Parameter an Objekte
* XML-lastige Konfiguration
* Validierung in XML gefällt mir _überhaupt nicht_!
--> Struts scheint ein Beispiel für XML-Programmierung zu sein
JSF
---
pro
* Argumente dafür gibt es zwar auch, aber wegen folgender Gründe scheidet es trotzdem aus
kontra
* Ohne HTTP POST läuft praktisch nichts -> ein Unding!
* JavaScript verseucht bis in den letzten Zipfel
* Ressourcenhungrig
* Architektonische Schwächen
--> JSF kommt für mich nicht in Frage
JBoss Seam
----------
* Basiert auf JSF, kommt also auch nicht in Frage.
Stripes
--------
pro:
* einfache Bindung der Parameter an Objekte
* wenig Konfiguration
* soll relativ einfach zu erlernen sein
kontra:
* Die Action-Beans sehen denen von Struts verdächtig ähnlich. Da gefällt mir die Bindung der Parameter an ein POJO à la Spring besser.
* Projekt scheint relativ klein und wenig bekannt zu sein. Die Zukunft ist möglicherweise etwas unsicher.
* Validierung in den ActionBeans gefällt mir nicht. Nach meiner Meinung gehört das in die Domain-Klasse oder höchstens in eine Validatorklasse, die einer Domain-Klasse zugeordnet ist.
Alles in allem scheint mir Wicket die verlockendste Möglichkeit zu sein. Ich habe sehr viel Gutes und nur wenig Schlechtes darüber gelesen. Was mich allerdings sehr stört sind die hässlichen URLs. Das ist nun mal ein wesentlicher Teil der Außenansicht der Anwendung. Aber vielleicht könnte ich damit leben.
Welche Framework könnt ihr mir empfehlen und welches von den genannten passt am besten zu meinen Anforderungen?
in der letzten Zeit habe ich versucht, mit Spring MVC eine Webanwendung zu entwickeln. Die Architektur und Flexibiliät von Spring MVC gefällt mir auch, aber trotzdem werde ich nicht so richtig warm mit diesem Framework. Immer wieder stehe ich vor Problemen und weiß nicht weiter, irgendwann habe ich bisher (bis auf das letzte Problem) immer eine Lösung gefunden, aber ich habe das Gefühl, dass ich mich mehr mit dem Framework als mit der eigentlichen Aufgabe befasse. So langsam reift bei mir die Erkenntnis, dass ich mit Spring MVC einfach nicht glücklich werde.
Die Frage ist nur: Was dann?
Folgende Anforderungen habe ich an ein Webframework:
* Bindung übergebener Daten an beliebige POJOs
* Validierung, anschließende Anzeige von Eingabefehlern sollte einfach sein
* Unterstützung für Internationalisierung
* URLs sollten weitgehend nach eigenem Geschmack auf Controller und Methoden abgebildet werden können. URLs sollten auch nach bestimmten Nutzeraktionen noch als Lesezeichen taugen.
* So wenig externe (XML-)Konfiguration wie möglich
* Unterstützung von Datei-Uploads
* Saubere Trennung von Programmlogik und HTML
* Erweiterbar
* Einfache Dinge sollten auch einfach umsetzbar sein.
* Framework sollte nicht fest an ein Build-System wie Maven gekoppelt sein.
* HTML-Seiten sollten ohne JSF und möglichst auch ohne JSP erzeugt werden können (FreeMarker gefällt mir besser).
* Erzeugte Seiten sollen prinzipiell auch ohne JavaScript funktionieren.
* Die Zukunft des Frameworks sollt einigermaßen gesichert sein.
Ich habe mich durch diverse Seiten im Web gewühlt und folgende Eindrücke von verschiedenen Frameworks gewonnen:
Spring MVC
----------
pro
* saubere Architektur
* Sehr flexibel und gut erweiterbar
kontra
* relativ viel Konfiguration
* Ich stehe immer wieder vor rätselhaften Problemen und werde mit dem Framework einfach nicht warm.
Wicket
------
pro
* HTML-Komponenten werden in Java gesteuert
* Mehr Web-Funktionen sind standardmäßig enthalten (Stichwort Hochladen von Dateien)
* keine Annotationen notwendig
* Pures Java, keine XML-Konfiguration
* Pure HTML-Vorlagen
kontra
* höherer Speicherbedarf, dadurch dass der Status der Anwendung je Nutzer gespeichert wird
* hoher Lernaufwand (http://entwickler.de/zonen/portale/psecom,id,101,online,1301,.html)
* hässliche URLs, die an eine Sitzung gebunden werden
Tapestry
--------
pro
* wahrscheinlich performanter als Wicket
kontra:
* soll komplexer/schwerer erlernbar als Wicket sein
* XML-lastig
* schlecht dokumentiert
* Schwer testbar, weil man teilweise zu abstrakten Klassen gezwungen wird. (http://www.infoq.com/news/2006/12/wicket-vs-springmvc-and-jsf)
Struts 2
--------
pro
* scheint relativ geradlinig zu sein, wenn man mal von der XML-Programmierung absieht.
kontra
* Umständliche Bindung der Parameter an Objekte
* XML-lastige Konfiguration
* Validierung in XML gefällt mir _überhaupt nicht_!
--> Struts scheint ein Beispiel für XML-Programmierung zu sein
JSF
---
pro
* Argumente dafür gibt es zwar auch, aber wegen folgender Gründe scheidet es trotzdem aus
kontra
* Ohne HTTP POST läuft praktisch nichts -> ein Unding!
* JavaScript verseucht bis in den letzten Zipfel
* Ressourcenhungrig
* Architektonische Schwächen
--> JSF kommt für mich nicht in Frage
JBoss Seam
----------
* Basiert auf JSF, kommt also auch nicht in Frage.
Stripes
--------
pro:
* einfache Bindung der Parameter an Objekte
* wenig Konfiguration
* soll relativ einfach zu erlernen sein
kontra:
* Die Action-Beans sehen denen von Struts verdächtig ähnlich. Da gefällt mir die Bindung der Parameter an ein POJO à la Spring besser.
* Projekt scheint relativ klein und wenig bekannt zu sein. Die Zukunft ist möglicherweise etwas unsicher.
* Validierung in den ActionBeans gefällt mir nicht. Nach meiner Meinung gehört das in die Domain-Klasse oder höchstens in eine Validatorklasse, die einer Domain-Klasse zugeordnet ist.
Alles in allem scheint mir Wicket die verlockendste Möglichkeit zu sein. Ich habe sehr viel Gutes und nur wenig Schlechtes darüber gelesen. Was mich allerdings sehr stört sind die hässlichen URLs. Das ist nun mal ein wesentlicher Teil der Außenansicht der Anwendung. Aber vielleicht könnte ich damit leben.
Welche Framework könnt ihr mir empfehlen und welches von den genannten passt am besten zu meinen Anforderungen?