Joe,

Everything sounds and looks good to me.

One question though, I am not sure what you intend to do with user
management as such like one login per user (So they can't open a new browser
session and log in twice). Or other such things as how many are logged in
etc.

But maybe the User Factory could be handled in the Application scope
instead, just an idea.



Andrew Scott
Senior Coldfusion Developer
Aegeon Pty. Ltd.
www.aegeon.com.au
Phone: +613  8676 4223
Mobile: 0404 998 273



-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Joe Lakey
Sent: Wednesday, 29 August 2007 7:22 AM
To: cfcdev@cfczone.org
Subject: [CFCDEV] Feedback please

I'm building a mostly-OO CF application. What follows is a quick summary of
the application (no code). I'd like to get your feedback on the initial
design, as well as any suggestions.

--- Overview ---
The application will allow users in the company to create and administer
custom surveys. Value added (over sites such as SurveyMonkey) is connection
to internal LDAP server and other data sources and keeping company data
inside the firewall. 

--- Components ---
User: 
* One instance in session scope for each user. 
* Instantiated in onSessionStart. 
* Handles authentication, roles, and persisting user data (employee Id,
name, email, manager, etc.). 

LDAP: 
* One instance in application scope. 
* Instantiated in onApplicationStart.
* Handles interaction with corporate LDAP server.
* Almost static: will persist data already retrieved from LDAP in struct to
be checked before querying LDAP. Data will be timestamped, and stale data
"pruned". 

Survey:
* Instantiated when: 
  - a user begins to create/modify a survey (one Survey object created in
session scope)
  - a user begins to take a survey (created by and within Response object)
* Persists data about a survey (survey name, active status, employees
required to take the survey, etc.)
* Contains a struct of Question objects.
* Contains one SurveyGateway object (created by init method).
* Contains one QuestionGateway object (created by init method).

SurveyGateway
* Created in and by Survey object (in init method of Survey).
* One instance contained within each Survey object.
* Handles interaction with db and data persistence.

Question
* Created by QuestionGateway object, which is contained by Survey object.
* Struct of Question objects is contained by Survey object.
* Contains information about one survey question (question text, label for
reporting, options if multi-choice, etc.).
* Almost like a TO (no business logic, only getters and setters).

QuestionGateway
* Created in and by Survey object (in init method of Survey).
* Contained by Survey object.
* Acts almost like both a gateway to retrieve and persist data and a factory
to create Question objects.

Response
* Instantiated when a user begins to take a survey.
* Contains one Survey object (created by init method).
* Contains one ResponseGateway object (created by init method).
* Contains a struct of survey answers.

ResponseGateway
* Instantiated in init method of Response object.
* Contained by Response object.
* Handles interaction with db and data persistence.

--- Comments ---
* Only "gateway" objects (no DAOs) are used for simplicity. Gateway objects
will handle CRUD operations as well as multi-record queries.
* The "view" layer will be cfm pages using custom tags for layout.
* onRequestStart intercepts submitted forms and (cf)includes appropriate
processing scripts.
* Form processing scripts will create or use existing objects as necessary
then (cf)include or redirect user to appropriate page.
* Data is persisted in cached queries in gateway objects.
* There are a couple of components related to reporting not shown here.

--- Unresolved Issues and Questions ---
* Where is data manipulation done (e.g., computed fields, sorting,
filtering, paging)?
* Is some kind of factory called for?
* Are layers properly separated? 
* Do I need a service layer? If so, how would it fit in?
* Where to do validation of submitted data?
* Should all data be bound to request scope to be passed to view layer?
* Should utility functions be wrapped in a Utility object and persisted in
application scope, or just (cf)included on every page request?

I'm not expecting an in-depth review; I'm just looking for pointers,
particularly if I've really mangled something. Thanks in advance.

--
Joe Lakey
Sr. Technical Analyst
FedEx Services


You are subscribed to cfcdev. To unsubscribe, please follow the instructions
at http://www.cfczone.org/listserv.cfm

CFCDev is supported by:
Katapult Media, Inc.
We are cool code geeks looking for fun projects to rock!
www.katapultmedia.com

An archive of the CFCDev list is available at
www.mail-archive.com/cfcdev@cfczone.org



You are subscribed to cfcdev. To unsubscribe, please follow the instructions at 
http://www.cfczone.org/listserv.cfm

CFCDev is supported by:
Katapult Media, Inc.
We are cool code geeks looking for fun projects to rock!
www.katapultmedia.com

An archive of the CFCDev list is available at 
www.mail-archive.com/cfcdev@cfczone.org

Reply via email to