On Saturday, May 4, 2002, 4:55:02 PM, Struts Newsgroup wrote:

SN> <[EMAIL PROTECTED]>  === (great thread) If #1 is
SN> prefered, can somone please coment as to the practical value of
SN> the valueObject layer if one is not doing EJB. Why not:

SN> myFormBean.setDAO(myDAO.retSelf());

    Vic, do you have an example of this at the basebeans site? I'm
    still trying to get a handle on what specifically is done in the
    business objects and what is specifically done in the DAO objects.

    Just a couple questions I'd like to throw out there..

    1) First what methods should be in a DAO. In other words if you
    are dealing with Employees, should the DAO do everything related
    to an Employee ie. insertEmployee, getEmployees,
    getSingleEmployee, updateEmployee ?

    2) What should the methods in the DAOs return? Are they returning
    ResultSets to the Business Objects? Collections of beans?

    Thanks for any more feedback.
    --Rick
    

SN> This allows me to unit test the dao (DAO in my case has a SQL string and 
SN> CachedRowSet). This allows me to unit test the bean, without Struts or 
SN> action classes.
SN> It also allows me to re-use the bean outside of Struts (ex: SOAP, so VB 
SN> applications can read it on client side).

SN> Vic

SN> OT: I think anything that does not allow you to unit test DAO or Bean 
SN> without action class is not best practice. Anything that assumes you are 
SN> using EJB is not best practice. IMHO

>> 

>> I see what you're doing and agree it seems easier.
>> 
>> But coupling the form beans to the DAO's so tightly I wouldn't call a best
>> practice. Here is another approach:
>> 
>> 
>> - Have the DAO's return Value Objects. But then have a setValueObject() on
>> the form bean so you can store the entire value object in it.
>> 
>>      First, in your action class, do something like:
>> 
>>           myFormBean1.setValueObject1(myDao1.getValueObject1());
>> 
>>      Then either,
>> 
>>      1. Have your get/set methods for the form bean properties use the
>> value object for storage internally, like:
>> 
>>           // in the form bean.java file
>> 
>>           private ValueObject valueObject1
>>           public void setValueObject1(ValueObject val1) {
>>                this.valueObject = val1;
>>           }
>> 
>>           // Note: no property1 field needed!
>>           public String getProperty1() {
>>                return this.valueObject.getProperty1();
>>           }
>>           public void setProperty1(String property1) {
>>                this.valueObject.setProperty1(property1);
>>           }
>> 
>> 
>>      - or -
>> 
>>      2. Have the setValueObject() in the form bean deconstruct the value
>> object and store its components in the form bean
>> 
>>           // again, in the form bean.java file
>> 
>>           // Note: no valueObject1 field needed!
>>           public void setValueObject1(ValueObject val1) {
>>                this.property1= val1.getProperty1();
>>           }
>> 
>>           private String property1;
>>           public String getProperty1() {
>>                return this.valueObject.getProperty1();
>>           }
>> 
>> 
>> Another alternative would be to put a "facade" in front of multiple DAO's
>> to simplify the actoin class and decouple it from the back end data
>> sources.
>> 
>>      // In  MyAction.java
>> 
>>      int id = 123;  // id is key into back end systems
>>      MyFacade facade = new MyFacade();
>>      MyFormBean formBean1 = facade.getFormBean(id);
>> 
>>      // Then in the facade, have something like:
>> 
>>      public MyFormBean (int identifier) {
>> 
>>           MyFormBean mfb = new MyFormBean();
>> 
>>           MyDao1 dao1 = new MyDao1 ();
>>           mfb.setDao1Vals(dao1.getVals(id));
>> 
>>           MyDao2 dao2 = new MyDao2 ();
>>           mfb.setDao2Vals(dao2.getVals(id));
>> 
>>           MyDao3 dao3 = new MyDao3 ();
>>           mfb.setDao3Vals(dao3.getVals(id));
>> 
>>           return mfb;
>>      }
>> 
>>      This decouples the FormBean and the Action class  from the structure
>> of the DAOs and the back-end sysems.
>> 
>> 
>> 
>> Given all this, I like the first approach above the best.....
>> 
>> 
>> FWIW -
>> Kevin
>> 
>> 
>> 
>> 
>> 
>> Mike Duffy <[EMAIL PROTECTED]> on 05/03/2002 11:50:37 AM
>> 
>> Please respond to "Struts Users Mailing List"
>>       <[EMAIL PROTECTED]>
>> 
>> To:   [EMAIL PROTECTED]
>> cc:    (bcc: Kevin Bedell/Systems/USHO/SunLife)
>> Subject:  Forms Beans and DAO (Best Practices)
>> 
>> 
>> I am pre-populating a form with information from a data base.
>> 
>> Is the following procedure acceptable, or is there another procedure
>> that would be considered a "Best Practice"?
>> 
>> Instantiate the form bean in the action class.
>> 
>> Instantiate one or more DAO objects in the action class.
>> 
>> Call methods in the DAO objects that would take the form bean as an
>> argument and fill up the necessary fields.
>> 
>> I understand the need to keep layers separate; however, if I am just
>> trying to fill up the fields in a form, it seems unnecessary to have
>> the DAO objects return data objects and then call a series of
>> "get/set" methods to take the data from the data objects and put it
>> in the form bean.
>> 
>> Thanks.
>>


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

Reply via email to