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
Hope that's the factual information you were looking for :)
On Wed, Jun 23, 2010 at 11:45 PM, Stefan Bachert <stefanbachert@yahoo.de> wrote:
Hi,
Do you, or others, have any valid arguments (opinions are no valid
On Jun 22, 3:36 pm, Andrew Hughes <ahhug...@gmail.com> wrote:
> Almost all of the "problem's" listed below are bad advice and I suggest you
> disregard them.
arguments)
I am not going to do things the wrong or the poor way just because
most people are doing so.
I am explaining the long story about my lessons I learned.
> 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.....
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.
-----------------------------------------------------------------
@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 google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
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 google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
No comments:
Post a Comment