Hi all,
Thanks for the info. Here's another issue.
What if I have an employee search screen that wants to show only some of the information of an employee (not all). What do you do then?
1. Instanatiate an Employee object and only fill in the relative information? Keep in mind that this could be just employee name and location on the search results screen and then when the user chooses which employee to view I need to get all of the employee information.
2. Instantiate an Employee object and fill out all the information even though you won't be needing most of it on the search results screen?
3. Create 2 DTOs, one called Employee and one called EmployeeSearch DTO. The EmployeeSearch DTO only stores what needs to be shown on the search results screen and the EmployeeDTO holds all the information for what needs to be shown on the detail screen?
4. Something else...
Thanks!
Matt
Navjot Singh wrote:
hi matthew,
I wont say that you go with one or other of your approaches.
It depends upon type of assosciation that 2 entities may share. They may have aggregation or composition relationship. Depending on that your DAO implementation will decide that you need to get ONLY id or the composite objects.
Let me explain.
Say you have class named ORDER ad ORDER_DETAILS. (consists-of relationship) Order without order details is nothing. So you may get the OrderDetails object as well when you get Order.
Now say you have EMPLOYEE and DEPARTMENT. (has-a relationship) EMPLOYEE *may* still exists with or without department. So you may get only id of department and later fetch the department.
Think in employee table, you have relationship (reports-to). If you specify this relation as composition, you may go on fetching the objects all the way up to the organization chart ;-)
Do i make sense? Navjot Singh
-----Original Message-----
From: Matthew J. Vincent [mailto:[EMAIL PROTECTED] Sent: Wednesday, August 11, 2004 8:21 AM
To: Struts Users Mailing List
Subject: [OT] DAO ... where to draw the line?
[OFF TOPIC]
I know this is a struts forum, but as struts developers using DAOs, where do your DAO implementation draw the line?
For example:
Let''s say I have three tables:
Employee (contains employee_id, employee_name, and dept_id) Department (contains dept_id, dept_name, loc_id) Location (contains loc_id, location_name)
How deep do your classes go to replicate the data? Do you do this...
public class Employee { private int id; private String name; private int deptId; // just the id
// .. implementation details }
or do you do this
public class Employee { private int id; private String name; private Department dept; // all of the data
// .. implementation details }
and so on and so on. Class Department has the same type of problem. Does it hold just the id for location or a variable class Location?
Should DAOs just fill in the id (keys) so it is up to the application using the DAOs to get the Employee class, then the Department class, and the the Location class like:
Employee emp = EmployeDAO.getEmployee(1);
Department dept = DepartmentDAO.getDepartment(emp.getDeptId());
Location loc = LocationDAO.getLocation(dept.getLocId());
System.out.println(emp.getEmpName() + " works in " + loc.getLocationName());
or
Employee emp = EmployeDAO.getEmployee(1);
System.out.println(emp.getEmpName() + " works in " + emp.getDept().getLoc().getLocationName());
Now this is just a simple example, but where do you draw the line? It's possible to go on and on and on and cycle back to employee...
Any thoughts, links, tips, best practices, whatvere would be helpful!
Thanks!
Matt
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]