I took a trip out to California this past weekend for a wedding.  On
my trip I thought, and thought, and thought and thought a lot more.
I like to think on long trips.  When I am programming at home I am
under the gun to type something, but with no computer I can just
think and brainstorm.  Oh, you want to know what about...I will get
to my point now...

As much as it just seems so tempting and beautiful and quick, I
truly, truly believe that generating ActionForms dynamically with
xdoclet is just not the right way to go.  I believe it is a forced
association, one of those things that you want to believe so badly
that you will do whatever you can to make it seem like an
association, when really there is little similarity at all.
Entities are almost exactly the same as ActionForms most of the
time, but the exceptions are enough to prove they should not be
parallel (and even Ted Husted thinks so, one example being
http://husted.com/struts/tips/005.html but I have read his comments
elsewhere on the subject).  ActionForms should be flexible to suit
the view, not necessarily to suit the model.  In fact, it is only
your Manager that should care how you designed your ActionForms, so
that even the DAO cares only about the entity design.  Here are
several reasons why xdoclet should not be used to make ActionForms
from entities.

1. Most of the time, an ActionForm just holds the info from a entity
bean, such as a link, but the main forms (the 20% that are used 80%
of the time) are much more complex and don't just line up with a
single entity.  These ActionForms should be allowed to work for the
view, not be dictated by the architecture of the model.

2. Forms can have nested beans, which must be ActionForms, not the
associating entity or else you are back to the reason you create
ActionForms in the first place, as a proxy.  With xdoclet this just
generates all sorts of a mess, because if you extend your xdoclet
generated ActionForm, then you have to change the reference to the
nested form.  Argh, messy.

3. Validation.  It is very, very wrong (I believe) to use validation
tags on your entity bean.  On one form the date might have a range
limitation, on another form it might not, but still be the same
entity.  xdoclet validation tags should go on the ActionForm class
(an impossibility if you are generating the class dynamically,
unless of course you transfer over the tags, but then other issues
arise).  Again, messy, messy.

...and all for what?  To generate something that eclipse can make in
10 seconds!

Anyway, while it might suck, typing out an ActionForm isn't quite
that hard and I think using xdoclet to generate them is just an
indirection.  You are most likely going to have to extend that
generic ActionForm that xdoclet creates to provide extra methods
anyway.  For example, date handling needs a special object, nested
forms need to have nested ActionForm objects and then there are
collections.  xdoclet just doesn't cut it here once you get into
more complex apps (think event scheduler).  I beat my head against
the wall for hours until I just let go of ejbdoclet and then it all
become very lucid.  Your ActionForm is a very important view proxy
to your entity beans, so don't try to get away with auto-generating
it.

That is my 2 cents and it is hard to convince me otherwise at this
point because of how much easier it has already been to work with
struts forms, xdoclet and my persistence data by abandoning xdoclet.
Plus, now my entity beans don't have struts tags in them, a very
important separation of model and view.  Oh, and if I move a field
to a different table/entity bean, I don't have to go redesign my
form necessrily, though I do have to modify my Manager, but that is
okay, because both are part of the business, not the view.  The
view is still safe.  While I am dying for someone to see the light,
I can live with enjoying it alone for a while.  Remember, you don't
want to overdo things, and this is backing away from xdoclet where
it is prudent to do so.

Dan

-- 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Daniel Allen, <[EMAIL PROTECTED]>
http://www.mojavelinux.com/
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Real programmers just hate to get up in the morning, and 
contrary to Ordinary People, they're in better shape as 
it gets closer to nighttime.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100006ave/direct;at.asp_061203_01/01
_______________________________________________
Struts-apps mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/struts-apps

Reply via email to