Would it better/worse to move the getValueObject() method out of
CustomerForm.java, so you could use DynaActionForms and not have to write
CustomerForm.java?  Maybe it could go in a reusable class that knows how to
get various ValueObjects from various DynaActionForms.

Thanks,
Dan

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: Monday, October 14, 2002 11:13 AM
> To: Struts Users Mailing List
> Subject: RE: DAO or ... ? [Scanned for known viruses]
> 
> 
> 
> 
> 
> 
> James -
> 
> I've attached a few files from my upcoming book Struts Kick Start that
> provide a basic design pattern that sounds like it may be 
> similar to what
> your describing.
> 
> What I do is:
> 
>  - Create a Value Object that encapsulates data communicated 
> with the Model
> component.
> 
>  - Create a facade class that accepts and returns value 
> objects through
> 'business methods'. By defining the facade to work at a 
> 'business method'
> level, it helps keep any code related to a particular 
> persistence layer or
> back-end system out of the Action class. This also addresses 
> the issues you
> described of 'designing to test' - the clean seperation 
> between the Action
> class and the Model components that the Facade provides 
> simplifies testing.
> 
>  - Create the form bean to provide set/get methods that also 
> accept and
> return value objects - this greatly simplifies the Action class and
> isolates it from changes.
> 
> The Action class (a bit simplified - I've taken out detailed 
> comments and
> exception handling) goes something like:
> 
>       // cast the form bean
>       CustomerForm cf = (CustomerForm) form;
> 
>       // Create a facade to interface to the back-end system
>       CustomerWSFacade facade = new CustomerWSFacade();
> 
>       // Extract the value object from the form bean
>       CustomerValueObject cvo = cf.getValueObject();
> 
>       // Pass the value object to the facade. It returns an 
> update value object
>       cvo = facade.addressChange( cvo );
> 
>       // Use the returned value object to update the values 
> in the form bean.
>       cf.setValueObject(cvo);
> 
> These particular classes come from the chapter on providing 
> integration
> with Axis for Web Services. Another chapter uses the identical set of
> classes to communicate with JBoss using a Session Bean - all I did was
> write a different facade class. The point of this was to demonstrate a
> design that made it very simple to perform maintenance or 
> changes on the
> back-end or persistence layer.
> 
> 
> 
> Regarding testing - I'd recommend you take a look at the 
> StrutsTestCase
> project at sourceforge - it provides some great templates for 
> both JUnit
> and Cactus tests that are designed for Struts. Makes 
> JUnit/Cactus testing
> pretty straightforward. A copy of this and detailed 
> directions also come
> with the book.
> 
>       http://strutstestcase.sourceforge.net/
> 
> 
> Best of luck -
> Kevin
> 
> 
> Author, Struts Kick Start
> 
> (See attached file: customer.zip)
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> "Couball, James" <[EMAIL PROTECTED]> on 
> 10/14/2002 01:19:16 PM
> 
> Please respond to "Struts Users Mailing List"
>        <[EMAIL PROTECTED]>
> 
> To:    "'Struts Users Mailing List'" <[EMAIL PROTECTED]>
> cc:     (bcc: Kevin Bedell/Systems/USHO/SunLife)
> Subject:    RE: DAO or ... ?
> 
> 
> I recommend taking a look at the Session Fa�ade pattern in 
> the Java Blue
> Prints.  No matter if you use EJBs or not, this pattern 
> encapsulates the
> ideas that Simon was mentioning.
> 
> Does anyone know the name of the more general pattern that 
> doesn't involve
> Session Beans specifically?
> 
> One of my general concerns is "design to test".  I like to be 
> able to test
> the (business/persistence) layer that the actions will call 
> independently
> of
> struts, actions, etc.  Encapsulating that layer in an API (or 
> wrapping with
> a session bean) makes this possible.
> 
> Sincerely,
> James.
> 
> > -----Original Message-----
> > From: Andrew Hill [mailto:[EMAIL PROTECTED]]
> > Sent: Monday, October 14, 2002 8:16 AM
> > To: Struts Users Mailing List
> > Subject: RE: DAO or ... ?
> >
> > But you still call the API from the action right - is this 
> not invoking
> > the
> > functionality that persists your data?
> >
> > Seems a bit like semantic juggling to me... (after all the 
> persistance
> > layer
> > is just an abstraction API on top of writing to db/disk/punchcard
> > itself...)
> > ;-)
> >
> > I would however agree that there ought to be some sort of 
> abstracting
> > layer
> > between the view and the implementation specific details of 
> the p-tier...
> >
> > -----Original Message-----
> > From: Chappell, Simon P [mailto:[EMAIL PROTECTED]]
> > Sent: Monday, October 14, 2002 23:04
> > To: Struts Users Mailing List; [EMAIL PROTECTED]
> > Subject: RE: DAO or ... ?
> >
> >
> > You invoke your persistence code in the same place that you 
> would invoke
> > any
> > other code ... not in the Action!
> >
> > Write all your core application code (business rules, persistence,
> > communications etc) in a way that has no connection to the 
> view portion
> of
> > your system and then create a API to it. This way you can 
> have any client
> > you like call into your core code and your core code doesn't need to
> worry
> > about what calls it, only about acting upon requests.
> >
> > Then use the actions to call into the API and pass the API 
> return values
> > to
> > the JSPs. Works great.
> >
> > /------\    /---\   /----\
> > |Client|--> |API|-->|Core|
> > |Code  |    |   |   |Code|
> > \------/    \---/   \----/
> >
> > The API is now your fire break. Nothing on the Core Code side has to
> worry
> > about displaying anything and nothing in the Client Code 
> has to worry
> > about
> > calculating anything.
> >
> > Simon
> >
> > -----------------------------------------------------------------
> > Simon P. Chappell                     [EMAIL PROTECTED]
> > Java Programming Specialist                      www.landsend.com
> > Lands' End, Inc.                                   (608) 935-4526
> >
> >
> > >-----Original Message-----
> > >From: Andrew Hill [mailto:[EMAIL PROTECTED]]
> > >Sent: Monday, October 14, 2002 9:57 AM
> > >To: Struts Users Mailing List
> > >Subject: RE: DAO or ... ?
> > >
> > >
> > >So where should one invoke the persistance layer?
> > >
> > >-----Original Message-----
> > >From: Lacerda, Wellington (AFIS) 
> [mailto:[EMAIL PROTECTED]]
> > >Sent: Monday, October 14, 2002 22:51
> > >To: 'Struts Users Mailing List'
> > >Subject: RE: DAO or ... ?
> > >Importance: High
> > >
> > >
> > >Hi Kevin
> > >
> > >Avoid persistence in Action code as much as you can.
> > >
> > >This is the general recommendation.
> > >
> > >Wellington Silva
> > >Author of "JSP and Tag Libraries for Web Development"
> > >FAO of the UN - Consultant
> > >
> > >-----Original Message-----
> > >From: Kevin Viet [mailto:[EMAIL PROTECTED]]
> > >Sent: Monday, October 14, 2002 4:45 PM
> > >To: struts-user
> > >Subject: DAO or ... ?
> > >
> > >
> > >My question is a web app design question.
> > >What pattern you guys follow when you want to save a 
> domain object in
> > >the database ?:
> > >
> > >- use the DAO pattern of java blueprint  (persistence 
> layer is called
> > >into classes)
> > >- call to persistence statements into action code :
> > >
> > >   // store example
> > >   try {
> > >         PeristenceLayer pl = getPerstitenceLayer();
> > >         pl.save(domainObject);
> > >   }
> > >   catch (Exception
> > >
> > >
> > >--
> > >Kevin Viet <[EMAIL PROTECTED]>
> > >ActiVia Networks
> > >
> > >
> > >
> > >
> > >--
> > >To unsubscribe, e-mail:
> > ><mailto:[EMAIL PROTECTED]>
> > >For additional commands, e-mail:
> > ><mailto:[EMAIL PROTECTED]>
> > >
> > >
> > >--
> > >To unsubscribe, e-mail:
> > ><mailto:[EMAIL PROTECTED]>
> > >For additional commands, e-mail:
> > ><mailto:[EMAIL PROTECTED]>
> > >
> > >
> > >--
> > >To unsubscribe, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> >
> >
> > --
> > To unsubscribe, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> >
> >
> > --
> > To unsubscribe, e-mail:   <mailto:struts-user-
> > [EMAIL PROTECTED]>
> > For additional commands, e-mail: <mailto:struts-user-
> > [EMAIL PROTECTED]>
> 
> --
> To unsubscribe, e-mail:   <
> mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <
> mailto:[EMAIL PROTECTED]>
> 
> 
> 
> 
> 
> 
> 
> --------------------------------------------------------------
> -------------
> This e-mail message (including attachments, if any) is 
> intended for the use
> of the individual or entity to which it is addressed and may contain
> information that is privileged, proprietary , confidential 
> and exempt from
> disclosure.  If you are not the intended recipient, you are 
> notified that
> any dissemination, distribution or copying of this communication is
> strictly prohibited.  If you have received this communication 
> in error,
> please notify the sender and erase this e-mail message immediately.
> --------------------------------------------------------------
> -------------
> 

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

Reply via email to