Hi Jesse,

Thanks for your response!

--
However, I still think ARP is lighter weight; I define light weight as "more
files = more heavy".  ARP doesn't have ViewLocators, ViewHelpers,
ModalLocator, etc.
--

OK, I think we should be careful here then ... conventionally, developers
will talk about a heavyweight framework as one that imposes upon the
application developer.  A framework with less classes isn't lighterweight,
it's smaller.

Pedantic perhaps, but I'd be loathe to have newbies think that something is
heavyweight, where in actual fact it just has a few more classes in a ZIP
file.  And to be honest, if we started counting marker interfaces and
ArpForm classes/etc, I'd be surprised if there aren't more files in ARP than
Cairngorm, and hence, by your definition, it's "more heavyweight" :)  But
that'd be silly :)

--
My point is ViewHelper and ViewLocators; I don't see the point of
abstracting that away; Commands work just fine for dealing with the
deatails.

I get my data from data services and stick it in ModelLocator; would I not
do the same for a RemoteObject call?  Get the data and hang it there for
Commands to grab?
--

Yes!  The idea of ModelLocator is that however state is updated
(client-side, local shared object, RemoteObject, WebService, HTTPService)
the result of that data service is an update of state (in the ModelLocator).
So the application is oblivious to the implementation of the data services,
it simply binds view to model.

This is absolutely our recommendation as to how you handle data that is
returned, and make it available for the view.  With Cairngorm 0.99, we
absolutely stated that developers should use the ModelLocator strategy as
much as possible over using ViewHelpers to push data onto the view (and I
mean this irrespective of how you choose to implement the ViewHelper, either
as a class of getters/setter, a code-behind class, etc).

This allows us to advocate that the ViewHelper is now simply a class that
allows us to manipulate and massage data before it is presented on the view.
Perhaps data is returned in a raw or unproceesed format from a service, but
we wish to clean it up in some way for presenting to the user; we'd use a
ViewHelper to do this preparation of the model for the View.

To put this into perspective; on a Cairngorm 0.99 architecture, we now have
VERY few view helpers in our application, due to the elegance of the
ModelLocator and the leveraging of data binding.  

But the thinning out of ViewHelpers isn't because there's something
fundamnetally wrong with the strategy of keeping knowledge of the View out
of commands; it's because the strategy of using data-binding for model->view
notification removes many of the development problems for which the
ViewHelper was proving to be an appropriate and recurring solution.

----
>>>>>
So rather than a Command class have to know to do:

_root.mainScreen.addressBook.addressEntry.forename.text = result.forename;

The Command class could instead say:

AddressBookViewHelper.setForename( result ); <<<<<

See, I see no problem with that; to me, that's a Command's job, and if he
can't take the heat, and needs another class to deal with extra typing... 
good for him.  For me, I'm fine with it.
----

I think this maybe underlies another key point then Jesse ... you own the UI
design and development *and* the application development.  We're working on
projects right now where there are 20-30 Flex developers, each of whom are
collectively sharing a codebase -- it's not typical for us to be doing
single-person projects.  In these instances, the typical developer of a
command class doesn't want or need to understand the inter-relationship of
MXML files, how someone else has chosen to componetise and structure things,
or built from forms or movieclips.  They don't want their commands breaking
when someone refactors a Repeater to a List and a Cell Renderer, and the
component hierarchy changes. They simply want to say "we have data to
update" and assume that the view that relies upon the data will update
accordingly, irrespective of it's implementation.

In the Breeze presentation that's out there where I talk about architecting
Flex applications (the talk I gave at MAX last year when we announced
open-sourcing Cairngorm) we defined the term "Enterprise RIA" as the tipping
point for which you should consider the use of a microarchitecture like
Cairngorm.  I gave a number of indicators as to when you might be working on
an Enteprise RIA, from memory these included:

o       A large number of developers working on the project
o       A large number of use-cases in the applications (10s or 100s)

The motivation for the Command pattern is to offer scalablity in the
handling of user-gestures, and to simplify the actioning of business logic
in response to a number of different user gestures.  So by ensuring that a
keyboard shortcut, a doubleclick in a datagrid, the pressing of a toolbar
button or the selection of a menu item ALL broadcast the same event, we can
invoke a single command.

The commands *need* not know about the view, and certainly one of our
motivations in using this design pattern, is that an application developer
can code the command without knowing the structure of the view.  Oftentimes,
the view and the command are written by different teams of developers, and
increasingly (as designers become as comfortable producing MXML as they did
HTML) by different skills of developers.

Irrespective, if it works for you, it works for you. But as a generic
architectural practice, we find when consulting that the removal of the
knowledge of the implementation of the view from the commands, makes it
easier for developers to join a project and become productive quickly in the
collaborative development of that project (that's why we say that using the
design patterns from Cairngorm will improve scalability and maintainability
of the project).

--
I don't recall calling it evil, but if I did, I mis-spoke.  I do not
understand it, cause again, my Views don't change, and if they do, I'm not
nesting movieclips; I'm just calling getters and setters, and our dev cycle
is short, so having to change 5 lines of code because of a simple form name
change isn't a big deal; again, hard for me to see the justification in such
short projects.
--

Agree entirely -- in your case, it's a design/development decision that you
can make, and for which you're comfortable with the implications of the
trade-off.  

I wouldn't advocate that as a general best-practice however, for large-team
large use-case developments where I'd be *really* recommending the use of a
framework such as Cairngorm.

Anyway - thanks for the discussion, I think it's valuable to raise these
things up for people to understand.

Best wishes,

Steven

--
Steven Webster
Technical Director
iteration::two
 
This e-mail and any associated attachments transmitted with it may contain
confidential information and must not be copied, or disclosed, or used by
anyone other than the intended recipient(s). If you are not the intended
recipient(s) please destroy this e-mail, and any copies of it, immediately.
 
Please also note that while software systems have been used to try to ensure
that this e-mail has been swept for viruses, iteration::two do not accept
responsibility for any damage or loss caused in respect of any viruses
transmitted by the e-mail. Please ensure your own checks are carried out
before any attachments are opened.




------------------------ Yahoo! Groups Sponsor --------------------~--> 
<font face=arial size=-1><a 
href="http://us.ard.yahoo.com/SIG=12hecuf32/M=362335.6886445.7839731.1510227/D=groups/S=1705007207:TM/Y=YAHOO/EXP=1123332232/A=2894361/R=0/SIG=13jmebhbo/*http://www.networkforgood.org/topics/education/digitaldivide/?source=YAHOO&cmpgn=GRP&RTP=http://groups.yahoo.com/";>In
 low income neighborhoods, 84% do not own computers. At Network for Good, help 
bridge the Digital Divide!</a>.</font>
--------------------------------------------------------------------~-> 

--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to