Imagine a new user to T5. He (or she) is learning a complete different
approach to developing web applications to what he is used to. He
already can do many things like writing pages and forms and also knows
some of the basic components already. But not all of them because he is
still learning. Now he has this requirement that part of the form - say
a different billing address for some order - should only be displayed if
the user checks a checkbox. He scans through the list of components and
sees:
- Form: ah yes, I'll need that one...
- Fragment: hmm, dunno what this does, doesn't seem to solve my problem
- If: exactly what I need, things should only be displayed IF some
condition is met
- Checkbox: right, user should check that one in order for the fields
for the billing address to display
And now he goes on developing his form, has to make sure it gets
redisplayed whith the correct fields when the checkbox state changes and
has a real hard time implementing this requirement - remember he is
still new to all this stuff and learning.
On the other hand if he had seen ConditionalFormFragment right below
Form he might have thought: "Wait. FormFragment might be some part of a
form. And that conditional thing might mean it only gets displayed when
some kind of condition occurs. I'm gonna check this out."
And believe me, the approach I pointed out above is exactly the approach
new users will take. I gave a workshop on T4 to 10 postgraduate students
- no beginners but they had never been in touch with Tapestry before.
They all tried to implement the requirements with the little set of
components they knew and if they found no matching one, they scanned the
list of components for one that seemed promising. And I bet they will
skip Fragment because the name has nothing to do with their requirement.
Uli
Chris Lewis schrieb:
If you can find one person who claims that the names of the components
had anything to do with their troubles in picking up T4, I will be
extremely surprised. Whenever a person engages in _any_ activity, a
certain vocabulary is used that isn't normally used elsewhere. The whole
idea of a component driven framework is a departure from conventional
thought that goes in to developing web applications, even if the method
has been around for a few years now. On top of that, some of the
requirements for building T4 apps are inarguably weird at first glance
(abstract methods for properties, etc). No matter what a component is
named, the pains of picking up a new toolkit are not going to go away.
It's still required to understand ioc, how T5 ioc backs the framework,
pages, templates, components, mixins, and how they all fit together.
Component naming won't change any of that. What I am saying is that this:
<t:form>
...
...
<t:conditionalformfragment>
...
...
</t:conditionalformfragment>
</t:form>
Is not even the slightest bit more clear to me than:
<t:form>
...
...
<t:fragment>
...
...
</t:fragment>
</t:form>
It's a fragment in a form - I know what it does.
Ulrich Stärk wrote:
According to Howard's presentations and statements, overcoming the
steep learning curve of T4 and other frameworks is one of the goals of
T5. Using component names that can only be understood if you know the
specific vocabulary and context in which those components are used
don't really contribute to that goal...
Uli
Chris Lewis schrieb:
Adding my 2 cents, I'd take a bolder stand in the name of terseness
and just call it Fragment. The java community has a historical
obsession with stuffing as much as possible into everything. Package
names, class names, variable names, you name it.
I agree with Ulrich that it's important to know off hand what
something is, or at least have a moderately-less-than-vague idea
about it. However I don't believe that this necessitates painful
names. If "Fragment" is used in only one context - a Form - then
simply seeing a <t:fragment>... or a <div t:type="fragment">... will
be sufficient to know that it is a container for a partial form, and
we can intuit its workings accordingly. The "Zone" component, while
sounding a tad weird at first, is a good example of this. We know
what a zone is because it has one context: a visual piece of a page
that is (re)rendered via Ajax. It could have been more descriptively
named AjaxPageZone or AjaxPageFragment, but we easily added "Zone" to
our vocabulary because of its specific contextual use. I propose the
same astuteness be applied for this component as well.
sincerely,
chris
Howard Lewis Ship wrote:
I like FormFragment.
On Feb 18, 2008 2:07 PM, Ulrich Stärk <[EMAIL PROTECTED]> wrote:
Chris Poulsen schrieb:
Hi,
Howard Lewis Ship wrote:
I've been continuing to work on Ajax/Form functionality.
Last couple of days has been on a component I'm calling a SubForm.
A SubForm is part of a Form that is conditionally visible.
It is always rendered, but a trigger (typically a checkbox) makes it
visible or hidden.
Form controls on the client side are only validated if visible.
Actually, "deep visible", meaning that they are visible and that
their
containers are recursively visible.
On submission, a hidden field for each SubForm tracks its deep
visibility.
On the server side, the form submission for components enclosed
by the
SubForm only occurs when the SubForm is visible on the client side.
If the SubForm is invisible, then no form processing for those
components occur.
It's all working pretty nicely, but I'm not sure "SubForm" is the
right name.
Other idea:
- Section
- FormSection
- FormConditional
- ???
I'll be committing changes later this afternoon so nows a great time
to get the naming right.
FormFragment ?
I'm looking forward to playing with the changes regardless of what
you
decide to call it ;)
I'd give it a meaningful and still natural sounding name. It's a bit
longer but I think "ConditionalForm(Section|Part|Fragment)" would
be ideal.
Uli
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]