Q: How would you re-use this in Model 1?

.V



[EMAIL PROTECTED] wrote:
> 
> 
> 
> 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]>




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

Reply via email to