I recently ran into a lot of the same head scratching that you are
currently tackling.  I'm going to preface this with the fact that I am
relatively new to OO in CF as well and this is by no means gospel!

 

I started by modeling the domain, that is creating the objects I could
easily identify.  In your case, I would begin by modeling a single user,
then creating the more specific objects like worker and manager, then
move on to creating a project and an assignment.  After creating each of
the specific objects that model "things" in my app, I then created DAO
objects.  Once you have all the pieces, it then becomes a job of how
they fit together.  In my case I created two objects to manage aggregate
access and another to manage access to that specific object type; a
gateway and a service object.  The gateway is intended to process all
aggregate information on each object, and the service object is used to
interact with the individual object.

 

Here is a possible object architecture (indented items are composited
objects):

 

project.cfc - Project Bean

      - ManagerArray (will store the manager object(s) of this project)

 

projectDAO.cfc - Data access object for a project

 

projectService.cfc - Manages access to the project data (an example
method would be projectDAO.read(project)

      - projectDAO

      - project

 

projectGateway - Manages aggregate access to projects

 

user - Generic user object that contains:

      - projectArray

 

userDAO - Data Access Object for users

 

userService - generic user access service

      - user

      - userDAO

 

userGateway - Manages aggregate access to users

 

 

manager extends user - more specific manager object

      - WorkersArray

 

managerDAO extends userDAO - data access object for managers

 

managerService - manages access to manager object

 

managerGateway - Manages aggregate access to managers

 

worker extends user

      - assignmentArray

 

workerDAO - worker DAO object

 

workerService - manages access to worker object

 

assignment - specific assignment object

 

assignmentDAO - DAO object for assignments

 

assignmentService - manages access to the assignment

 

assignmentGateway - manages aggregate access to assignments

 

 

With this method, once all objects are created and populated with data,
you can access the data in flexible ways.  You asked how you could get
the following structure:

 

Worker

    Project1

       Assignment1a

       Assignment1b

    Project2

       Assignment2a

       Assignment2b

 

 

Considering the worker has an array of it's project stored internally
you can loop over that array, and then use the assignment service to
return the assignments for that specific project.  Something like:

 

<!--- get a worker from the worker service --->

<cfset worker = workerService.getWorker(1)>

#worker.getName()#

 

<cfset projects = workerService.getProjects()>

 

<!--- loop over the project array contained in the worker --->

<cfloop from="1" to="#arrayLen(projects)#" index="i">

      project: #projects[i].getName()# <br>

      

      <!--- get all assignments for this project --->

      <cfset assignments =
assignmentGateway.getAssignments(worker.getID(), projects[i].getID())>

      

      assignments: <br> 

      <!--- output the name of each assignment --->

      <cfloop query="assignments">

            #assignements.name#<br>

      </cfloop>

</cfloop>

 

I hope this gives you some ideas that will help you move forward.  If
anyone else has any input on this type of an architecture, I'd be glad
to hear about it!

 

Rich Kroll

Application Developer

 

 

-----Original Message-----
From: Joelle Tegwen [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, May 10, 2006 10:06 AM
To: CF-Talk
Subject: In totally over my head with OOP and extends (OT?)

 

I'm a (soon to be) former ASP programmer with a little training in Java 

trying to do OOP as I learn CF and I've got a "how the heck does this 

work" question.

 

I'm happy to go RTFM if I only knew the question I'm asking. So if 

there's some FM I should go read just point the way. :) And maybe it's 

just totally off topic and I should go to some other list with this 

question (or some kind soul will pity me and help me anyway).

 

I'm learning CF with this little time tracking application. It's got 

Manager.cfc (extends User) and Worker.cfc (extends User).

There are Projects, Managers administer Projects and Workers contribute 

Effort to meet a given (percent effort) Assignment.

 

So the way I'm looking at this is that Managers have Projects, but so do


Workers. But a WorkerProject (extends Project) has Assignments (which 

have Effort) and a ManagerProject (extends Project) has workers.

 



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Message: http://www.houseoffusion.com/lists.cfm/link=i:4:240096
Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4
Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4
Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
Donations & Support: http://www.houseoffusion.com/tiny.cfm/54

Reply via email to