C++-Webframeworks in Übersicht: Wt (witty)

Standard

Bei meiner Suche nach geeigneten Webframeworks bin ich auf verschiedene Projekte gestoßen, die ich hier in einer kleinen Serie kurz vorstellen möchte:

Das Projekt Wt (witty) verfolgt ein völlig anderen Ansatz als die anderen Frameworks. Es versucht die Web Programmierung soweit zu abstrahieren, dass es sich anfühlt, als würde man eine GUI mit dem bekannten Qt-Framework schreiben. Die Code-History geht bis auf das Jahr 2009 zurück. Der erste Commit ist aber so umfangreich das ich davon ausgehe, dass das Projekt schon wesentlich älter ist und zu dem Zeitpunkt nur das  Versionskontrollsystem gewechselt wurde.

ohloh_net_wt

Laut der Code-Analyse von ohloh.net ist es das aktivste C++-Webframework-Projekt. Fünf Programmierer steuern ihren Code dazu. Die Mailingliste ist relativ aktiv. Wt kommt ohne Pre-Compiler und ohne Qt-Libs aus. Also bei aller Nähe zu Qt wird eine eigene Code-Base verwendet. Die Arbeitsteilung zwischen Web Designer und Programmierer wird aus dem Konzept heraus nicht streng möglich sein. Bei sehr Javascrip-lastigen Anwendungen und bei single page application wird Wt aber seine Stärken ausspielen können.

Anfänglich war ich von Wt recht begeistert. Ich habe schon Erfahrungen mit Qt und so war mir das Konzept gleich eingängig. Bis man aber ein lauffähige Programm hat, hat man eine Menge Code geschrieben. Das Layout einer Seite steuert man über C++-Code/-Klasse, der die Gestaltung sehr stark abstrahiert. Will man Elemente nebeneinander gruppieren, verwendet man Layout-Klassen, in die man andere Elemente hineingruppiert. Möchte man eine Kleinigkeit an dem Aussehen verändern, sieht man sich mit der Herausforderung konfrontiert, die C++Klasse zu finden, die den HTML-Code generiert, den man ändern möchte. Und hier ist die größte Schwäche von Wt: der HTML-Code, der von Wt generiert wird, ist ziemlich aufgeblasen. Ich war immer wieder viele Stunden damit beschäftigt, herauszufinden welche C++-Klasse für mein HTML-Code verantwortlich ist.

Das macht es auch extrem schwierig über CSS das Aussehen des HTML-Code zu steuern. Auch eine relativ simple Seite hat einen tiefen HTML-Baum. Es war oft sehr kniffelig im C++-Code Tag-IDs oder Tag-Klassen-Namen zu vergeben, um sie dann später zum Einen wiederzufinden und zum Anderen mit CSS anzusteuern. Ein Webdesigner wird hier Probleme bekommen, seine Idee umzusetzen. Was natürlich wunderbar geht, ist die Vererbung. Da alle C++-Klassen in sich vollständig sind und keine View-Schicht haben, kann man damit verfahren, wie mit ganz normalem C++-Code.

Siehe auch: „C++-Webframeworks in Übersicht: Als Tabelle“


Creative Commons Lizenzvertrag

C++-Webframeworks in Übersicht: Als Tabelle

Standard

Bei meiner Suche nach geeigneten Webframeworks bin ich auf verschiedene Projekte gestoßen, die ich hier in einer kleinen Serie kurz vorstellen möchte. Hier eine tabellarische Übersicht, über die vier wichtigsten Projekte:

Projektname Wt (Witty) CppCMS Tntnet Treefrog
Projektstart 2009 2008 2005 2011
Abstraktionslevel Sehr hoch Mittel Mittel Sehr hoch
Aktive Entwickler >5 1 >1 >2
Code-Zeilen 285.620 1.839.480 260.388 51.335
Prepompiler Nein Ja Ja Ja
Abhängigkeiten
  • CMake
  • Boost-Lib
  • OpenSSL  (Opt.)
  • Pango (Opt.)
  • Boost-Lib
  • Python 2.x
  • CgiCC
  • libgcrypt
  • gettext
  • cxxtools
  • automake*
  • autoconf*
  • libtool*
  • postgresql-devel**
  • zlib-devel
  • openssl-devel
Qt
Lizenz
  • Open  Source
  • proprietär
  • Open Source
  • proprietär
OpenSource OpenSource
Datenbank-
unterstüzung
  • Firebird
  • SQLite
  • PostgreSQL
  • MySQL
  • SQLite
  • PostgreSQL
  • MySQL
  • SQLite
  • PostgreSQL
  • MySQL
  • Oracle
Über Qt:

  • MongoDB
  • SQLite
  • PostgreSQL
  • MySQL
Mailingliste Ja (sehr aktiv) Nein Ja Ja
Authentifikations-
methoden
  • Facebook
  • Google
  • E-mail-Token
  • SHA1
  • MD5
  • OAuth
  • Token
Extras E-mail-Versand
  • Serialisierung
    • XML
    • Json
    • CSV
  • Logging
  • Komplexes URL-Routing
  • REST
    • XML
    • Json
    • Binary
    • CSV
  • SOA
  • Validation
  • Mailer
  • Logging
  • Plugin
  • Image Manipulation
Pakete in
Distributionen
Ja Nein Ja Nein
Dokumentation Mittel,
viele Beispiele
Wenig Mittel,
viele Beispiele
Mittel
OS
  • Linux
  • Windows/Cygwin
  • MacOS
  • Android
  • Raspberry Pi
  • QNX
  • Solaris
  • Linux
  • Windows/Cygwin
  • MacOS
  • FreeBSD
  • Linux
  • UNIX-like OS
  • Linux
  • Windows
  • UNIX-like OS
  • MacOS

Erläuterungen
* Abhängigkeit wenn die Bibliothek selber übersetzt wird.
** Abhängigkeit optionaler Funktionen.


Creative Commons Lizenzvertrag