Wann soll Google Web Toolkit nicht verwendet werden? [geschlossen]


55

Ich denke darüber nach, GWT für ein bedeutendes internes Web-App-Entwicklungsprojekt zu verwenden. Meiner Meinung nach ist es ein großer Vorteil, dass die Kompilierung mit Javascript (zumindest theoretisch) meinem Team hilft, die Größe des Tech-Stacks um eins zu reduzieren .

Nachdem ich jedoch (wie die meisten Entwickler) zuvor gebrannt habe, 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?


11
Ich dachte, GWT ist gestorben.
Aaron McIver

1
@ Aaron, wirklich?
Jas

10
Ich kann GWT persönlich nicht empfehlen. Die Einstellung, mit der Sie dazu gezwungen werden, für Desktop-Anwendungen zu arbeiten, wird Ihnen jedoch Probleme bereiten, wenn Sie versuchen, in HTML-Funktionen so zu denken. Ich bin ein Fan davon, das Codierungsparadigma auf das jeweilige Problem abzustimmen, und die Abstraktion steht mir im Weg. Deshalb habe ich mich jedes Mal, wenn ich anfing, es auszuwerten, entschieden, es nicht zu verwenden.
Berin Loritsch

2
@Jas Erfahrung war vor ein paar Jahren; Es steckt noch in den Kinderschuhen und fühlte sich zu der Zeit sehr rau an. Hat sich das geändert? Vielleicht ... aber ich versuche langsam, die Grundlagen von Frameworks zu lernen, anstatt mich auf die Frameworks selbst zu verlassen. Am Ende des Tages ist es ein Fleischwolf zum Ausrühren von JS; Nicht, dass es eine schlechte Sache wäre, aber nicht irgendwo, wo ich mich anstrengen möchte. Viele dieser Frameworks werden aufgrund mangelnder Kenntnisse über Technologie X oder ähnliches ausgewählt. Sie müssen sich jedoch irgendwann mit Technologie X auskennen.
Aaron McIver

10
Ich kenne mich in JS sehr gut aus, habe dort einige ziemlich ernste Sachen geschrieben, aber ich leite jetzt ein sehr zeitkritisches Projekt und kann es mir nicht leisten, dass Nachwuchskräfte wegen Fehlern, die durch Kontextwechsel von Java zu JS verursacht werden, Zeit verschwenden. Wenn Sie also ein reales Beispiel dafür haben, warum GWT für Sie nicht funktioniert hat, beschreiben Sie es bitte. Andernfalls wollen wir uns nicht gegenseitig mit hypothetischen und höchst subjektiv gefärbten Diskussionen beschweren.
Jas

Antworten:


84

Ich bin sowohl gut als auch schlecht darin, diese Frage zu beantworten - gut darin, dass ich sie tatsächlich zuvor verwendet habe, und schlecht darin, dass ich vor der Arbeit mit GWT ziemlich viel Erfahrung mit HTML / CSS / JavaScript hatte. Das hat mich wütend gemacht, GWT so einzusetzen, wie es andere Java-Entwickler, die DHTML nicht wirklich kennen, vielleicht nicht getan haben.

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, dass alle Abstraktionen fehlerhafte Abstraktionen sind (eine Lektüre lohnt sich, wenn man GWT berücksichtigt). Bei GWT führt dies speziell zu folgenden Problemen:

Das Verwenden von HTML in GWT ist zum Kotzen.

Wie ich schon sagte, abstrahiert HTML bis zu einem gewissen Grad sogar. Für einen Java-Entwickler klingt das gut. Aber es ist nicht. HTML ist ein Dokument-Markup-Format. Wenn Sie Java-Objekte zum Definieren eines Dokuments erstellen möchten, verwenden Sie keine Dokument-Markup-Elemente. Es ist unglaublich wortreich. Es wird auch nicht genug kontrolliert. In HTML gibt es im Wesentlichen eine Möglichkeit zu schreiben <p>Hello how are <b>you</b>?</p>. In GWT sind 3 untergeordnete Knoten (Text B, Text) an einen PKnoten angehängt . 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 der Entwicklung mit vielen Entwicklern ist der Versuch, das Aussehen Ihres HTML-Dokuments durch Verfolgung Ihres GWT-Codes zu entschlüsseln, ein Prozess, der Kopfschmerzen verursacht.

Am Ende entschied das Team, dass vielleicht die Verwendung von HTMLPanel für alles HTML der richtige Weg ist. Jetzt haben Sie viele der Vorteile von GWT verloren, die darin bestehen, dass Elemente für Java-Code leicht verfügbar sind, um einfach Daten zu binden.

Das Verwenden von CSS in GWT ist zum Kotzen.

Durch die Anbindung an die HTML-Abstraktion unterscheidet sich auch die Art und Weise, wie Sie CSS verwenden müssen. Es hat sich möglicherweise verbessert, seit ich das letzte Mal GWT verwendet habe (vor ungefähr 9 Monaten), aber zu der Zeit war die CSS-Unterstützung ein Chaos. Aufgrund der Art und Weise, wie Sie mit GWT HTML erstellen, gibt es häufig Knotenebenen, von denen Sie nicht wussten, dass sie injiziert wurden (jeder CSS-Entwickler weiß, wie sich dies dramatisch auf das Rendern auswirkt). 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 verändert hat, und wir hatten Probleme damit, Eigenschaften zu schreiben, die wir später explizit überschreiben mussten, oder in einigen Fällen unsere Versuche vereitelt haben, unseren handgemachten Anforderungen zu entsprechen. codiertes CSS und musste es nur so umgestalten, dass GWT es nicht vermasselte.

Union der Probleme, Schnittmenge 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. Es 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 das, was Jquery macht (wie DOM-Abfragen mit CSS-Selektoren). 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, dem ich angehörte, hat nie eine gute Lösung gefunden, und selbst wenn wir dachten, wir hatten immer eine undichte Stelle in der anderen.

Desktop! = Web

Wie @Berin Loritsch in den Kommentaren schrieb, ist das Modell oder die Denkweise, für die GWT entwickelt wurde, lebende Anwendungen, bei denen ein Programm eine lebende Anzeige aufweist, die eng mit einer Verarbeitungsmaschine gekoppelt ist. Das hört sich gut an, weil so viele das Gefühl haben, dass das Web fehlt. Es gibt jedoch zwei Probleme: A) Das Web basiert auf HTTP und dies ist von Natur aus anders. Wie bereits erwähnt, wurden die auf HTTP basierenden Technologien - HTML, CSS, sogar das Laden und Zwischenspeichern von Ressourcen (Bilder usw.) - für diese Plattform entwickelt. B) Java-Entwickler, die im Web gearbeitet haben, können nicht einfach auf diese Einstellung für Desktop-Anwendungen umsteigen. Architektur in dieser Welt ist eine ganz andere Disziplin. Flex-Entwickler wären für GWT wahrscheinlich besser geeignet als Java-Webentwickler.

Abschließend...

GWT ist in der Lage, schnell und einfach AJAX-Anwendungen mit nur Java zu erstellen. Wenn schnell und schmutzig nicht so klingt, wie Sie es möchten, verwenden Sie es nicht. Die Firma, für die ich arbeitete, war eine Firma, die sich sehr um das Endprodukt kümmerte, und die den Benutzer sowohl visuell als auch interaktiv aufpoliert. Für uns Front-End-Entwickler bedeutete dies, dass wir HTML, CSS und JavaScript so steuern mussten, dass die Verwendung von GWT dem Klavierspiel mit Boxhandschuhen ähnelte.


2
Ich habe einige der Gründe erkannt, warum wir Wicket anstelle von GWT gewählt haben.
biziclop

12
-1 Für FUD war meine Erfahrung mit GWT für kleine und große Anwendungen weitaus positiver als negativ. Und ich bin auf kein einziges dieser "Probleme" gestoßen, daher der FUD-Kommentar. Wir haben GWT-generierte Widgets mit sehr geringem Aufwand erfolgreich in sehr komplexe HTML-Seiten eingebettet. Wenn Sie wissen, was Sie tun, ist es wunderbar, wenn Sie nicht bedenken möchten, dass es eine neue, bessere Möglichkeit gibt, Dinge zu tun, dann folgen Sie dieser "Antwort" und ignorieren Sie diesen Kommentar.

9
@Jarrod Hierbei handelt es sich nicht um "Probleme", sondern um einfache Beschreibungen der Natur von GWT. Soweit relevant, habe ich sie speziell im Sinne unserer Projektziele als negativ eingestuft. Wenn Sie eine andere Erfahrung haben, können Sie diese gerne aufschreiben. Bis dahin ist die einzige unbewiesene Information Ihre Behauptung, dass GWT "neu und besser" ist. Übrigens - seit ich diese Antwort geschrieben habe, hat das Unternehmen (für das ich nicht mehr arbeite) über ein Jahr lang mehrere Ingenieure beschäftigt und das Projekt ohne GWT umgeschrieben. In kürzerer Zeit.
Nicole

1
@JarrodRoberson Ich bin mit NickC einverstanden, wäre toll, eine ebenso detaillierte Zusammenfassung Ihrer Erfahrungen zu lesen.
Funkybro

8
@NickC "In kürzerer Zeit" für das Neuschreiben eines Projekts ist für GWT IMO kein schwerer Schlag. Jedes Projekt, bei dem Sie im Grunde genommen wiederholen, was zuvor bereits in einem anderen Framework oder einer anderen Sprache durchgeführt wurde, sollte "weniger Zeit" in Anspruch nehmen.
Funkybro

24

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, also suchten wir nach Alternativen.

Unsere Anforderungen waren:

  • clientseitige Benutzeroberflächenebene, um die Serverlast zu minimieren
  • Browser-Kompatibilität
  • webbasierte RIA
  • Einfache Leistungsoptimierungen
  • Es ist keine Installation der Client-Plugins erforderlich. Diese sollte mit einer normalen Windows-Installation funktionieren

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

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

Unsere Anwendung sendet beim Start nur eine Anforderung an den Server. Das Negative ist, dass GWT (und auch Android) ein schlechtes Design haben, aber wenn Sie Ihr eigenes Erscheinungsbild anwenden, müssen Sie das CSS anpassen. Alternativ können Sie verschiedene Komponentenbibliotheken für GWT verwenden, mit denen Sie auf einfache Weise die richtigen Stile und Themen anwenden können.

Für mich hat es keinen Sinn, dass das HTML-DOM nicht so gut wie handgefertigt ist, das war nie ein Problem. Wenn ich in C ++ entwickle, schaue ich nicht auf den generierten Assembler-Code. Als ich mich in GWT weiterentwickelte, gab es für mich nie einen Grund, den JS-Code anzuschauen, und nur einmal einen Grund, das DOM anzuschauen und einige Umgestaltungen vorzunehmen.

Für mich ist GWT die einzige Wahl, wenn es um die Entwicklung von RIA 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 bleiben, dass Google GWT nicht für viele seiner internen Projekte verwendet und dass es derzeit 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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.