Verfasst: Dienstag 12. Mai 2009, 19:23
Als Anstifter zur Diskussion über Python-Wicket muss ich mich jetzt auch mal zu Wort melden. Es kommt immer wieder zur Sprache, warum Stefan nicht einfach Template-System X nimmt. Es wurde auch schon ein paar mal auf die wesentlichen Unterschiede zu Wicket eingegangen, aber da ich Wicket kenne, fühle ich mich dazu berufen, mich hier noch mal einzuklinken.
* Ein ganz zentraler Unterschied ist, dass bei Wicket keine Logik (Verzweigungen, Schleifen usw.) im Template vorkommen, dort stehen wirklich nur Element-IDs und ggf. ein paar Spezialtags, etwa zum Gruppieren bei Vererbung.
* Die Komponenten sind nach dem Entwurfsmuster Kompositum aufgebaut. Das bedeutet, dass man sie praktisch beliebig in einander verschachteln kann.
* Darauf folgt dann auch, dass die Struktur nicht flach wie bei normalen Templates ist, sondern ein Komponentenbaum.
* Dadurch kann man auch sehr leicht wiederverwendbare Komponenten erstellen. Man könnte z. B. ein TabbedPanel definieren, dem man die Tabs übergibt, zwischen denen mit Reitern umgeschaltet werden kann. Dieses Panel kann man bequem immer wieder verwenden.
* Die Komponenten reagieren auf Ereignisse, damit ist der HTTP-bedingte Bruch praktisch weg. GUI-Komponenten können über Methoden ihr Verhalten/Aussehen ändern.
* Es ist komplett objektorientiert. Normalerweise hört die Objektorientierung in den Templates auf. Man kann von einer Seite zur nächsten über Objekte kommen und braucht keine HTTP-Parameter. Beispiel: setResponsePage(new BestellFormular(kunde))
* Wenn man es zu Ende bringt, integriert sich AJAX ganz natürlich in die Anwendung.
Das fällt mir jetzt spontan ein. Wer interesse hat, spielt am besten mal etwas mit den Wicket-Beispielen, dann versteht man es besser.
Noch eine Anmerkung zu Stefans Frage nach der Zustandsspeicherung. Wicket speichert die Zustände der zuvor besuchten Seiten nur teilweise in der Session, ältere Zustände werden auf der Festplatte, in einer Datenbank oder wo auch immer gespeichert. Das kann man konfigurieren oder auch selbst einen Speicher implementieren.
Allerdings gibt es ein Problem, wenn man auch alle verbundenen Modelobjekte mitspeichert, denn dann wird es sehr schnell eng mit dem Hauptspeicher. Dafür gibt es bei Wicket LoadableDetachableModels, die nur eine ID beinhalten und beim Zugriff die Daten aus der DB laden. Hilfreich sind dann Pufferspeicher des Persistenz-Frameworks (wie Hibernate oder bei Python SQLAlchemy).
Ich glaube, so ein Framework für Python hätte extrem viel Potenzial, denn sowas gibt es bisher für Skriptsprachen meines Wissen nach nicht und wenn man sich von dem klassischen MVC-Modell gelöst hat, programmiert es sich irgendwie "natürlicher" damit.
* Ein ganz zentraler Unterschied ist, dass bei Wicket keine Logik (Verzweigungen, Schleifen usw.) im Template vorkommen, dort stehen wirklich nur Element-IDs und ggf. ein paar Spezialtags, etwa zum Gruppieren bei Vererbung.
* Die Komponenten sind nach dem Entwurfsmuster Kompositum aufgebaut. Das bedeutet, dass man sie praktisch beliebig in einander verschachteln kann.
* Darauf folgt dann auch, dass die Struktur nicht flach wie bei normalen Templates ist, sondern ein Komponentenbaum.
* Dadurch kann man auch sehr leicht wiederverwendbare Komponenten erstellen. Man könnte z. B. ein TabbedPanel definieren, dem man die Tabs übergibt, zwischen denen mit Reitern umgeschaltet werden kann. Dieses Panel kann man bequem immer wieder verwenden.
* Die Komponenten reagieren auf Ereignisse, damit ist der HTTP-bedingte Bruch praktisch weg. GUI-Komponenten können über Methoden ihr Verhalten/Aussehen ändern.
* Es ist komplett objektorientiert. Normalerweise hört die Objektorientierung in den Templates auf. Man kann von einer Seite zur nächsten über Objekte kommen und braucht keine HTTP-Parameter. Beispiel: setResponsePage(new BestellFormular(kunde))
* Wenn man es zu Ende bringt, integriert sich AJAX ganz natürlich in die Anwendung.
Das fällt mir jetzt spontan ein. Wer interesse hat, spielt am besten mal etwas mit den Wicket-Beispielen, dann versteht man es besser.
Noch eine Anmerkung zu Stefans Frage nach der Zustandsspeicherung. Wicket speichert die Zustände der zuvor besuchten Seiten nur teilweise in der Session, ältere Zustände werden auf der Festplatte, in einer Datenbank oder wo auch immer gespeichert. Das kann man konfigurieren oder auch selbst einen Speicher implementieren.
Allerdings gibt es ein Problem, wenn man auch alle verbundenen Modelobjekte mitspeichert, denn dann wird es sehr schnell eng mit dem Hauptspeicher. Dafür gibt es bei Wicket LoadableDetachableModels, die nur eine ID beinhalten und beim Zugriff die Daten aus der DB laden. Hilfreich sind dann Pufferspeicher des Persistenz-Frameworks (wie Hibernate oder bei Python SQLAlchemy).
Ich glaube, so ein Framework für Python hätte extrem viel Potenzial, denn sowas gibt es bisher für Skriptsprachen meines Wissen nach nicht und wenn man sich von dem klassischen MVC-Modell gelöst hat, programmiert es sich irgendwie "natürlicher" damit.