There's some good doco on this on the GWT site.... * a further language. No way to debug it FALSE: xml is not a new language, there is an XSD, there is also a eclipse editor with auto complete and inline problem highlighting to work with your own ui.xml template.
* limited to a set of widgets FALSE: the only requirement to attach a widget in a ui.xml is that it is a widget. * it is a graphic designer mindset (we do this app, the app is our concern) not a developer mindset (we do this class of apps, we separate concerns) *TRUE: and this is actually a very good thing for several reasons.... * no clear separation, no SoC. A big bunch of widgets and css-styles. *FALSE: You're java code does not contain layout or styling. There is SoC, you can manipulate rebuild your look and feel, layout, style without touching the java code. * no separation of theme/skin *FALSE: you can switch the (ui.xml) template file or CssResource several ways, and you can always load @external styles in the css/ui.xml or programatically set/implement them. Hope that's the factual information you were looking for :) On Wed, Jun 23, 2010 at 11:45 PM, Stefan Bachert <[email protected]>wrote: > Hi, > > On Jun 22, 3:36 pm, Andrew Hughes <[email protected]> wrote: > > Almost all of the "problem's" listed below are bad advice and I suggest > you > > disregard them. > > Do you, or others, have any valid arguments (opinions are no valid > arguments) > > I am not going to do things the wrong or the poor way just because > most people are doing so. > > > > The main problem I have with UiBinder is that when you try and use it > with > > the MVP architecture "best practice", you have to boilerplate all the > > parent/child (view) widget's. Which means you'll see a lot of..... > > I am explaining the long story about my lessons I learned. > > The problem with any pure declarative language is that you reached the > dead end of separation. > Either a dedicated aspect of separation is build in, or you are lost. > There is always a tradeof where declarative languages will become more > complex than an imperative one. > > UiBuilder is a pure declarative language. > > Let us look at CSS as a simple pure declarative language for example. > Consider there are two aspects/concern defining an value. > aspect 1) general theming. you want a certain padding > aspect 2) behaviour, you want to simulate a pressed state. Therefore > you need to change padding depending on the state > > With a imperative language ("java") you would just combine/add both > aspects. > With a language like css either this is supported or not. In css it is > not, bad luck. > (CSS3 supports a little imperativity with calc, but only FF is > supporting this somehow) > > And the pure declarative language CSS 2.1 still fails to support some > simpliest common needs. > Remember all the time the topic of centering widget is coming up. > > UiBinder fails the same way. It limits always your capabilities as a > developer. Either a concept is explicitly supported, or you are lost. > > There are other ways to be more declarative. One way is to use fluent > interfaces. Than you use both declarative and imperative approaches, > and can switched to the one which is more appropriate > > the way I am currently using is to define interfaces and use > generators. > The input looks like the interfaces at the end of this mail. > It defines a dialog with 2 subdialog. > > To create you need just. > LogonDialog logon = GWT.create(LogonDialog.class); > .. > logon.layout(); > logon.setI18N (..Constants); > > Accessing is a easy as > String text = logon.eingabe.eMail().getText() > > Let us compare this approach with UiBinder > > generator: only one annotated interface for deferred binding > UiBinder: class and UiBinder.XML with XMTL, CSS and WidgetsTags > > generator: layout automatically according css-style and annotations > UiBinder: dialog designer does it manually. > > generator: i18n constant change at any time > UiBinder: i18n per compilation > > generator: automatic labeling, yes > UiBinder: automatic labeling, no > > generator: styles based theming > UiBinder: styles based on accident > > generator: widgets, any with a default constructor > UiBinder: some widgets > > generator: consistent layout is automatically asured > UiBinder: layout by accident/capability of the designer > > generator: debugging: yes, pure java > UiBinder: no chance > > Open questions with UiBinder > * how to deal when the themes > * how to use it a input for further code generation (I think no way) > > Capabilities with generator approach > * rules are in the generator, one place > * control combined widgets (text + label for example making both > enable/disable/hidden) > * input is usable for further code generation > Ideas > * generate controller code, too (input DialogInterface and an > interface defining a domain/app/session object) > * generate request code, too > * generate client cache code, too > * ... > > > UiBinder is for the one how like to stay in a death end. > > When you want to generate boiler plate code, > you need to get rid of UiBinder. > > Stefan Bachert > http://gwtworld.de > > ----------------------------------------------------------------- > @SpaceStyle("a1-DialogSpace") > public interface LogonDialog extends DialogInterface { > > @OnlyI18N > static interface Eingabe extends DialogInterface { > > @Label("eMail") > @NewLine() > public TextBox eMail (); > > @Label("kennwort") > @NewLine() > public PasswordTextBox kennwort (); > > @Label("kennwortWiederholung") > @NewLine() > public PasswordTextBox kennwortWiederholung (); > > public void setI18N (Lokalisierung pI18N); > } > > @OnlyI18N > @SpaceStyle("a1-ButtonSpace") > static interface Schaltflaeche extends DialogInterface { > > @Text("anmelden") > @NewLine(LineBreak.BREAKEND) > public Button anmelden (); > > @Text("kennwortVergessen") > @NewLine(LineBreak.BREAKEND) > public Button kennwortVergessen (); > > @Text("registrieren") > @NewLine(LineBreak.BREAKEND) > public Button registrieren (); > > public void setI18N (Lokalisierung pI18N); > } > > @Placement(horizontal=Alignment.GROW) > public Eingabe eingabe (); > > @NewLine (LineBreak.BREAKEND) > public Schaltflaeche schaltflaechen (); > > @Placement(horizontal=Alignment.GROW) > @Height (3) > @NewLine (LineBreak.BREAKEND) > public HTML meldung (); > > @Width (-400) > @Placement(horizontal=Alignment.GROW) > public HTML hinweise (); > > public void setI18N (Lokalisierung pI18N); > } > > -- > You received this message because you are subscribed to the Google Groups > "Google Web Toolkit" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<google-web-toolkit%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/google-web-toolkit?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
