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.

Reply via email to