I think if we bent the technology for "miscreants" this far, we may
eventually go back to the typewriter and carbon paper.

Jack


On Wed, 16 Mar 2005 14:04:06 -0800, Craig McClanahan <[EMAIL PROTECTED]> wrote:
> On Wed, 16 Mar 2005 10:08:15 -0800, Dakota Jack <[EMAIL PROTECTED]> wrote:
> > <SNIP>
> > On Wed, 16 Mar 2005 09:54:48 -0800, Craig McClanahan <[EMAIL PROTECTED]> 
> > wrote:
> > > I agree with Ted, and the reasoning he states.  Indeed, in this
> > > particular respect, Action *should* be inflexible because making it an
> > > interface would encourage you to use it incorrectly.
> > </SNIP>
> >
> > How is an interface with the same signature more flexible in any
> > relevant sense here?  I don't see that.  How could an extension of an
> > Action class be more or less encouraging in how you use it "correctly"
> > or "incorrectly" than an implementation of an Action interface?  I
> > don't see what this could mean.
> >
> 
> One wrong way to use Action (if it were an interface) is:
> 
>     public void MyExistingBusinessLogicClass implements Action {
>         ... non-Struts-related business methods ...
>         public ActionForward execute(...) throws Exception {
>             ... call business logic methods in this class ...
>             ... return web tier specific navigation value ...
>         }
>     }
> 
> because it binds your existing business logic to Struts (and therefore
> servlet) APIs when it should be completely independent.
> 
> The corresponding right way:
> 
>     public class MyExistingBusinessLogicClass {
>         ... non-Struts-related methods ...
>     }
> 
>     public void MyStrutsAction extends Action {
>         public ActionForward execute(...) throws Exception {
>             ... acquire reference to MyExistingBusinessLogicClass ...
>             ... configure appropriately based on form inputs ...
>             ... delegate work to existing business logic methods ...
>             ... return appropriate navigation result ...
>         }
>     }
> 
> The "wrong way" version above is not possible (with Action as a base
> class), due to single inheritance in Java.
> 
> Note that neither approach prevents a different form of "wrong way":
> 
>     public void MyExistingBusinessLogicClass extends Action {
>         public ActionForward execute(...) throws Exception {
>             ... perform business logic directly in this method ...
>             ... return web tier specific navigation value ...
>         }
>     }
> 
> so yes, Action as a class can be misused ... but not in as many different 
> ways.
> 
> > <SNIP>
> > > History lesson time.
> > >
> > > Prior to Struts 0.5 (in 2000-2001), ActionForm was indeed an
> > > interface.  It became clear that a large majority of the audience for
> > > Struts was misusing it, by making their VO beans "implement
> > > ActionForm" -- violating the principle that ActionForm was, and is,
> > > part of the View tier (not the Model tier.  It was changed into a base
> > > class precisely to avoid this.
> > >
> > > As you might imagine, this was a controversial decision then.  But I'm
> > > sure glad we did it.
> > </SNIP>
> >
> > I also do not see the point in this.  Why cannot you misuse a class to
> > precisely the extent you can misuse an interface?
> 
> Same argument as above, but this time using existing value objects or
> data transfer objects from your model tier, and making them "implement
> ActionForm".  This was happening a *lot* in the early days, and
> changing to a base class fixed at least this misuse scenario.
> 
> It is also instructive to observe the growing popularity (in
> enterprise Java circles) of IoC approaches to instantiating business
> and service objects (Spring, Hivemind, PicoContainer, etc.), which are
> implemented as POJOs and composed via dependency injection.  I suspect
> that people who like this style (as opposed to more rigid API
> frameworks) in the model and business tiers are also likely to prefer
> it in the web tier as well.
> 
> Craig
> 


-- 
"You can lead a horse to water but you cannot make it float on its back."
~Dakota Jack~

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to