It would be great if someone would post a non-trivial example of MVP.
I have struggled extrapolating from the Contacts App into more complex
arrangements. I am by no means an authority, so please correct me.
My first take away was that their were a few rules:
1) Presenters don't know about specific GWT widgets (so that you can
test your business logic without GWTTestCase)
2) Displays don't know about business logic
3) Displays don't know about application logic
4) Displays don't know about model classes
I still consider the first 3 to be sacrosanct, but I have pretty much
dropped rule #4. I don't see a conceptual difference between a String
and a Contact. It seems silly to write code like:
for ( int i = 0 ; i < name.length ; i++ ) {
if ( active[i] ) { ... do stuff... }
if ( email[i] != null ) { ...do stuff...}
myPanel.add( name[i] ) ;
}
when I could just write:
for ( Contact contact : contacts ) {
if ( contact.getActive() ) { ... }
if ( contact.getEmail() != null ) { ... }
myPanel.add( contact.getName() ) ;
}
For one thing the first way of doing it makes your code more sensitive
to changes in your model. If I add or rename a field in my model I
have to edit my presenter to make another parallel array instead of
just having the new field available to display.
I would definitely agree that an operation like sorting should be done
in the presenter, but then it should call
"display.setContacts(contacts)" with the new sorted list. Similarly
at first I had a rule that displays wouldn't attach any event
handlers, but now I allow fairly trivial event handlers (those that
just do a "History.addItem()"). I have still enforced a rule against
the display having a handle to the event bus, but my resolve is
wavering on that as well.
Eric
On Feb 15, 3:06 am, Jan Ehrhardt <[email protected]> wrote:
> The presenter does sorting, mapping etc. The view even has no direct
> dependency to the presenter. If the view requires to notify the presenter,
> it will have to fire an event to the presenters event handlers.
>
> In your case, it would be cleaner to put the information, which contact will
> be displayed in wich row, into the presenter. The presenter should fill each
> table cell, while the table doesn't know anything about its content.
>
> You can think of the view as the most stupid part of your application. The
> view only does initalization and layout of the ui components, that's it. It
> provides methods to access some of the components like text field or labels,
> but all the logic is in the presenter.
>
> Regards
> Jan Ehrhardt
>
>
>
> On Sun, Feb 14, 2010 at 10:02 PM, Yaakov <[email protected]> wrote:
> > Hi all,
>
> > Am I correct in my understanding that the View NEVER has any
> > dependencies on the model? I.e., whatever sorting, mapping, etc needs
> > to be done between the view and the data, it's the Presenter that
> > holds the real data and just sets simple strings to the View?
>
> > So, following this and the Contacts example on GWT site, it would be
> > **incorrect** to create a ContactsFlexTable that would keep track of
> > which Contact is assigned to which row index in the table, right?
>
> > Thanks,
> > Yaakov.
>
> > --
> > 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%2Bunsubs
> > [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.