it-swarm.dev

Wann sollte Google Web Toolkit nicht verwendet werden?

Ich denke über die Verwendung von GWT in einem großen internen Web-App-Entwicklungsprojekt nach. In meinen Augen ist es der große Vorteil, dass Javascript übergreifend kompiliert wird, was meinem Team (zumindest theoretisch) helfen würde, die Größe des Tech-Stacks um eins zu reduzieren .

Nachdem ich jedoch zuvor verbrannt wurde (wie die meisten Entwickler), würde ich gerne von Programmierern hören, die es tatsächlich bei Problemen mit GWT verwendet haben, die die Verwendung innerhalb einer bestimmten Problemdomäne behindern oder einschränken würden.

Was sind die Argumente gegen die Verwendung von GWT und warum?

55
Jas

Ich bin sowohl gut als auch schlecht, um diese Frage zu beantworten - gut, da ich sie tatsächlich schon einmal verwendet habe, und schlecht, weil ich vor der Arbeit mit GWT ziemlich viel Erfahrung mit HTML/CSS/JavaScript hatte. Dies hat mich verrückt gemacht, GWT auf eine Weise zu verwenden, die andere Java Entwickler, die DHTML nicht wirklich kennen, möglicherweise nicht waren).

GWT macht das, was es sagt - es abstrahiert JavaScript und bis zu einem gewissen Grad HTML in Java. Für viele Entwickler klingt dies brillant. Wir wissen jedoch, wie Jeff Atwood es ausdrückt, alle Abstraktionen sind fehlgeschlagene Abstraktionen (eine Lektüre wert, wenn man GWT in Betracht zieht). Bei GWT führt dies speziell zu folgenden Problemen:

Die Verwendung von HTML in GWT ist zum Kotzen.

Wie ich schon sagte, abstrahiert bis zu einem gewissen Grad sogar HTML. Es klingt gut für einen Java Entwickler. Aber nicht. HTML ist ein Dokument-Markup-Format. Wenn Sie Java Objekte zum Definieren eines Dokuments erstellen möchten, Sie würde keine Dokument-Markup-Elemente verwenden. Es ist unglaublich ausführlich. Es wird auch nicht genug gesteuert. In HTML gibt es im Wesentlichen eine Möglichkeit, <p>Hello how are <b>you</b>?</p> zu schreiben. In GWT haben Sie 3 untergeordnete Knoten (Text, B, Text), der an einen P -Knoten angehängt ist. Sie können entweder zuerst das P oder zuerst die untergeordneten Knoten erstellen. Einer der untergeordneten Knoten ist möglicherweise das Rückgabeergebnis einer Funktion. Nach einigen Monaten von Die Entwicklung mit vielen Entwicklern, bei der versucht wird, das Aussehen Ihres HTML-Dokuments durch Nachverfolgen Ihres GWT-Codes zu entschlüsseln, ist ein kopfschmerzauslösender Prozess.

Am Ende entschied das Team, dass die Verwendung von HTMLPanel für alle HTML-Code möglicherweise der richtige Weg ist. Jetzt haben Sie viele der Vorteile von GWT verloren, da Elemente für Java Code) verfügbar sind, um Daten einfach zu binden.

Die Verwendung von CSS in GWT ist zum Kotzen.

Durch das Anhängen an die HTML-Abstraktion bedeutet dies, dass sich auch die Art und Weise, wie Sie CSS verwenden müssen, unterscheidet. Es hat sich vielleicht verbessert, seit ich GWT das letzte Mal verwendet habe (vor ungefähr 9 Monaten), aber zu der Zeit war die CSS-Unterstützung ein Chaos. Aufgrund der Art und Weise, wie GWT HTML erstellt, haben Sie häufig Ebenen von Knoten, von denen Sie nicht wussten, dass sie injiziert wurden (jeder CSS-Entwickler weiß, wie sich dies dramatisch auf das Rendern auswirken kann). Es gab zu viele Möglichkeiten, CSS einzubetten oder zu verknüpfen, was zu einem verwirrenden Durcheinander von Namespaces führte. Darüber hinaus hatten Sie die Sprite-Unterstützung, die sich wieder gut anhört, aber Ihr CSS tatsächlich mutiert hat, und wir hatten Probleme damit, Eigenschaften zu schreiben, die wir später explizit überschreiben mussten, oder in einigen Fällen unsere Versuche, unserer Hand zu entsprechen, zu vereiteln. CSS codiert und einfach so umgestalten müssen, dass GWT es nicht vermasselt hat.

Union der Probleme, Schnittpunkt der Vorteile

Jede Sprache wird ihre eigenen Probleme und Vorteile haben. Ob Sie es verwenden, ist eine gewichtete Formel, die auf diesen basiert. Wenn Sie eine Abstraktion haben, erhalten Sie eine Vereinigung aller Probleme und eine Überschneidung der Vorteile. JavaScript hat seine Probleme und wird häufig von serverseitigen Ingenieuren verspottet, verfügt jedoch auch über einige Funktionen, die für eine schnelle Webentwicklung hilfreich sind. Denken Sie an Closures, Syntaxkürzel, Ad-hoc-Objekte und all die Dinge, die von Jquery erledigt werden (wie DOM-Abfragen mit dem CSS-Selektor). Vergessen Sie jetzt die Verwendung in GWT!

Trennung von Bedenken

Wir alle wissen, dass mit zunehmender Größe eines Projekts eine gute Trennung der Anliegen von entscheidender Bedeutung ist. Eine der wichtigsten ist die Trennung zwischen Anzeige und Verarbeitung. GWT hat das wirklich schwer gemacht. Wahrscheinlich nicht unmöglich, aber das Team, in dem ich war, hat nie eine gute Lösung gefunden, und selbst wenn wir dachten, wir hätten es getan, war immer eines in das andere durchgesickert.

Desktop! = Web

Wie @Berin Loritsch in den Kommentaren gepostet hat, ist das Modell oder die Denkweise, für die GWT entwickelt wurde, lebende Anwendungen, bei denen ein Programm eine lebende Anzeige hat, die eng mit einer Verarbeitungsmaschine verbunden ist. Das hört sich gut an, denn so viele glauben, dass das Web fehlt. Es gibt jedoch zwei Probleme: A) Das Web basiert auf HTTP und dies ist von Natur aus anders. Wie oben erwähnt, wurden die auf HTTP basierenden Technologien - HTML, CSS, sogar das Laden von Ressourcen und das Zwischenspeichern (Bilder usw.) - für dieser Plattform erstellt. B) Java Entwickler, die im Web gearbeitet haben, wechseln nicht einfach zu dieser Desktop-Anwendungs-Denkweise. Architektur In dieser Welt ist dies eine völlig andere Disziplin. Flex-Entwickler wären wahrscheinlich besser für GWT geeignet als Java Webentwickler).

Abschließend...

GWT ist in der Lage, schnell und schmutzig AJAX) Anwendungen ganz einfach nur mit Java zu erstellen. Wenn schnell und schmutzig nicht so klingt, wie Sie es möchten, verwenden Sie es nicht. Das Unternehmen Ich habe für ein Unternehmen gearbeitet, das sich sehr um das Endprodukt gekümmert hat, und für den Benutzer ist es sowohl visuell als auch interaktiv. Für uns Front-End-Entwickler bedeutete dies, dass wir HTML, CSS und steuern mussten JavaScript auf eine Art und Weise, die die Verwendung von GWT zum Versuch machte, mit Boxhandschuhen Klavier zu spielen.

84
Nicole

Wir verwenden GWT für eine große E-Government-Webanwendung (SOA im Backend), die stark genutzt wird. Die alte Benutzeroberfläche war in DHTML, aber wir hatten Probleme mit der Browserkompatibilität, der Leistungsoptimierung und dem Entwicklungsprozess. Deshalb suchten wir nach Alternativen.

Unsere Anforderungen waren:

  • clientseitige UI-Schicht zur Minimierung der Serverlast
  • browser-Kompatibilität
  • webbasierte RIA
  • Einfache Leistungsoptimierungen
  • Es ist keine Installation von Client-Plugins erforderlich, sollte mit einer einfachen Windows-Installation funktionieren

Wir haben uns für GWT entschieden und ich bereue es nie. Das neue Team hatte keine oder weniger DHMTL-Erfahrung und daher war der Java dev-Prozess von GWT sehr hilfreich. Was Sie von der Box bekommen, ist:

  • browser-Kompatibilität
  • Java-basierter Entwicklungsprozess und Wiederverwendung von Code
  • einfache Minimierung von Anfragen (Bildbündel, ...)
  • einfaches aggressives Caching (neue Apps werden auf Client-Seite vollständig zwischengespeichert)
  • einfache Komprimierung aller Ressourcen (auch mit js auf älteren fehlerhaften IEs)
  • und vieles mehr, zu viel zu erwähnen

Unsere Anwendung sendet beim Start nur eine Anfrage an den Server. Negativ ist, dass GWT (und auch Android) sofort ein schlechtes Design haben. Wenn Sie jedoch Ihr eigenes Erscheinungsbild anwenden, müssen Sie das CSS anpassen. Alternativ können Sie verschiedene Komponentenbibliotheken für GWT verwenden, um das Anwenden geeigneter Stile und Themen zu vereinfachen.

Für mich macht es keinen Sinn, dass das HTML-DOM vielleicht nicht so gut wie handgefertigt ist, das war nie ein Problem. Wenn ich in C++ entwickle, sehe ich mir den generierten Assembler-Code nicht an. Als ich in GWT entwickelte, gab es für mich nie einen Grund, den JS-Code zu betrachten, und nur einmal einen Grund, das DOM zu betrachten und einige Umgestaltungen vorzunehmen.

Für mich ist GWT die einzige Wahl, wenn es um die RIA-Entwicklung geht, und ich hoffe, dass GWT eine glänzende Zukunft hat. Siehe das Leitbild unter:

[1] http://code.google.com/intl/de-DE/webtoolkit/makinggwtbetter.html#introduction

Es sollte jedoch nicht unerwähnt sein, dass Google GWT nicht für viele seiner internen Projekte verwendet und dass es derzeit einige Gerüchte über die Zukunft von GWT gibt

[2] http://googlewebtoolkit.blogspot.com/2011/11/gwt-and-Dart.html
[3] https://plus.google.com/105933370793992913359/posts/bLfSagtziBC

24
ChrLipp