{"id":275,"date":"2009-03-14T14:09:00","date_gmt":"2009-03-14T14:09:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=275"},"modified":"2009-03-14T14:09:00","modified_gmt":"2009-03-14T14:09:00","slug":"auffalligkeiten-von-smartgwt-1-0b2-und-ext-gwt-1-2-3-nach-einer-stunde-spielen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2009\/03\/auffalligkeiten-von-smartgwt-1-0b2-und-ext-gwt-1-2-3-nach-einer-stunde-spielen\/","title":{"rendered":"Auff\u00e4lligkeiten von SmartGWT 1.0b2 und Ext-GWT 1.2.3. nach einer Stunde spielen"},"content":{"rendered":"<ul>\n<li>Die Container und Layout-API sehen ein wenig anders aus. Bei SmartGWT gibt es eine Klasse Layout (und Unterklassen wie VLayout), die eigentlich Container mit einem speziellen assoziierten Layoutmechanismus sind. So hei\u00dft es dann auch layout.addMember(&#8230;) und das ist gew\u00f6hnungsbed\u00fcrftig. Da gef\u00e4llt mir Ext-GWT besser, wo wie bei AWT\/Swing den Layout-Manager auf einem Container setzt. Hier wird also bei Ext-GWT das \u00fcbliche Strategie-Muster eingesetzt.<\/li>\n<li>Die Optik von Ext-GWT (etwa bei Men\u00fcs) ist in meinen Augen deutlich besser. Es gibt viele kleine Fehler in der Darstellung, etwa Ein-Pixel freie Linien.<\/li>\n<li>Ext-GWT bietet bessere Unterst\u00fctzung f\u00fcr Formulare, was etwa das automatische Ein-\/Ausfalten von Details angeht.<\/li>\n<li>SmartGWT bietet vertikale Tabs und eine Integration vom Google Kalander.<\/li>\n<li>Das Binding funktioniert bei beiden v\u00f6llig anders. SmartGWT erwartet spezielle Binding-Komponenten, also etwa DataSourceTextField statt TextItem (ja, warum das nun nicht DataSourceTextItem hei\u00dft, &#8230;.). Wenn sp\u00e4ter Quellcode umbaut wird, muss man die Komponenten \u00e4ndern und wenn eine angepasste Unterklasse etwa von TextItem erbt, muss das auch anpasst werde. Das Design ist in meinen Augen nicht optimal. Besser macht es Ext-GW; hier bleibt man bei den Standardkomponenten und setzt diese sp\u00e4ter zu einer Gruppe (FormBinding) zusammen.<\/li>\n<li>Ext-GWT bietet eine prima XTemplate-Klasse, in der dann Platzhalter definiert werden k\u00f6nnen, etwa {[new Number(values.change).toFixed(2)]}, die sp\u00e4ter \u00fcber das Binding ersetzt werden.<\/li>\n<li>Bei SmartGWT l\u00e4sst sich nicht jede Komponente in einen DynamicForm setzen. Bei der RTF-Komponente RichTextEditor (ein VLayout) geht das zum Beispiel nicht. Daf\u00fcr gibt es noch mal den Wrapper RichTextItem (ein FormItem). Das ist verwirrend.<\/li>\n<li> Ohne Anpassungen beim SmartGWT ist der Font rechts einer Checkbox ein andere als Links von einem Textfeld.Und Warum muss bei TextItem immer standardm\u00e4\u00dfig ein Doppelpunkt gesetzt werden, was dann auch noch mit einem Leerzeichen vom Text abgesetzt wird?<\/li>\n<li>SmartGWT hat merkw\u00fcrdige Klassennamen wie com.smartgwt.client.core.<strong>BaseClass<\/strong> oder IButton (und eine Button-Klasse gibt es auch noch).<\/li>\n<li>SmartGWT-Methoden mit den Namen addItem(), addMember(), addChild() und addPeer() tragen nicht zur \u00dcbersichtlichkeit beim Hinzuf\u00fcgen von Komponenten be<\/li>\n<\/ul>\n<p>Fazit von einer Std. spielen und API-bl\u00e4ttern: Ext-GWT erscheint mit vom Design durchdachter und professioneller. Die SmartGWT API wirkt an vielen Stellen unverst\u00e4ndlich und \u00fcberfachtet. Ein Beispiel:<\/p>\n<ul>\n<li>void     setAttribute(java.lang.String attribute, boolean value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, java.lang.Boolean value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, DataClass value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, DataClass[] value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, java.util.Date value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, double value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, int value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, int[] value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, com.google.gwt.core.client.JavaScriptObject value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, java.util.Map value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, java.lang.String value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, java.lang.String[] value)<\/li>\n<li>void     setAttribute(java.lang.String attribute, ValueEnum[] value)<\/li>\n<\/ul>\n<p>Mit Ext-GWT macht mir die Entwicklung mehr Spa\u00df. Bei der API sind auch viel weniger Klassen\/Schnittstellen im Spiel, obwohl die API viel \u00e4lter ist.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Container und Layout-API sehen ein wenig anders aus. Bei SmartGWT gibt es eine Klasse Layout (und Unterklassen wie VLayout), die eigentlich Container mit einem speziellen assoziierten Layoutmechanismus sind. So hei\u00dft es dann auch layout.addMember(&#8230;) und das ist gew\u00f6hnungsbed\u00fcrftig. Da gef\u00e4llt mir Ext-GWT besser, wo wie bei AWT\/Swing den Layout-Manager auf einem Container setzt. Hier [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[16,15],"tags":[],"class_list":["post-275","post","type-post","status-publish","format-standard","hentry","category-gwt","category-web-frameworks"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=275"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/275\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}