Cool answer... made me think you should write a book. (We need an update or
an additional book to the already fine book on CFCs out there.)
Also... we ought to start a CF list called tech to tech... where answers
that are truely noteworthy are honored with a paypal contribution!
(Hmmmm..... funny, would I admit that answer was note worthy?)
John Farrar
----- Original Message -----
From: "Nathan Dintenfass" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, August 14, 2003 8:39 PM
Subject: RE: [CFCDev] CFC Persistance
> Sean's concise answer may be all you need to know, but just in case you
> wanted more....
>
> In general, CFC caching is very much like all variable-based caching in
CF.
> At your disposal you have the Application, Session, and Server scopes.
> Which one you use will depend on the nature of the component in question.
>
> So, for instance, take a very simple shopping cart component. I could
build
> the component to store, as instance data, the contents of a cart. Perhaps
> this is as simple as a structure of structures, or perhaps it's a
structure
> of other components -- but, that's a detail not germane to this
discussion.
> Your shopping cart might be something like:
>
> <cfcomponent>
>
> <cffunction name="init....>
> <cfscript>
> variables.cartItems = structNew();
> return this;
> </cfscript>
> </cffunction>
>
> <cffunction name="addItem"....>
> <cfargument name="itemID"...>
> <cfargument name="amount" default="1"....>
> <cfset variables.cartItems[arguments.itemID] =
newCartEntry(itemID,amount)>
> </cffunction>
>
> <cffunction name="newCartEntry"...>
> <cfargument name="itemID"...>
> <cfargument name="amount"...>
> <cfset var thisEntry = structNew()>
> <cfscript>
> [NOTE -- this might be where you get item info from a DB instead of just
the
> ID]
> thisEntry.item = structNew();
> thisEntry.item.id = arguments.itemID;
> thisEntry.amount = arguments.amount;
> </cfscript>
> </cffunction>
>
> <cffunction name="getAllItems"...>
> <cfreturn varibles.cartItems>
> </cffunction>
>
> .....
>
> </cfcomponent>
>
> Then, you could give each session a cart:
>
> <cfparam name="session.cart"
> default="#createObject("component","shoppingCart").init()#">
>
> So, you now have a shoppingCart instance cached in the session scope, and
> you can use the methods of that instance to do all things cart related
> (obviously, the above example is lacking a lot of functionality your real
> cart would have) while storing instance data as part of itself.
>
> Thus, the component knows nothing about its environment (good
encapsulation)
> and can be used any way someone sees fit. Meanwhile, your application
> decides the best way to use the cart is to give each session its own cart.
> The cart is good at storing/manipulating/giving cart stuff and your
> application is good at using a cart. All is right with the world ;)
>
> Hope this answers your question.
>
>
>
>
>
>
>
>
>
> > -----Original Message-----
> > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> > Behalf Of John Farrar
> > Sent: Thursday, August 14, 2003 4:12 PM
> > To: [EMAIL PROTECTED]
> > Subject: [CFCDev] CFC Persistance
> >
> >
> > There has been talk about CFC caching... persistance... ect. Can
> > some of the
> > GURUs share with us how and why they achieve this? Reading accross the
> > threads I have an idea how to do it... but am aware that we might miss
> > something in the fray of multiple posts.
> >
> > Example: Shopping Cart... I want it to persist without having to hit the
> > database each time. So, do I create the object each time in
> > "request" scope,
> > and then pull the variable set from somewhere? How are people
> > doing this and
> > what is the performance gain, coding advantage... please feel generous
and
> > bless those who will follow in your footsteps.
> >
> > John Farrar
>
> ----------------------------------------------------------
> You are subscribed to cfcdev. To unsubscribe, send an email
> to [EMAIL PROTECTED] with the word 'unsubscribe cfcdev'
> in the message of the email.
>
> CFCDev is run by CFCZone (www.cfczone.org) and supported
> by Mindtool, Corporation (www.mindtool.com).
>
>
----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email
to [EMAIL PROTECTED] with the word 'unsubscribe cfcdev'
in the message of the email.
CFCDev is run by CFCZone (www.cfczone.org) and supported
by Mindtool, Corporation (www.mindtool.com).