Sounds like you've got it nailed.  The concept is pretty much the
same, regardless of language.  I've implemented exactly this pattern
(using a different name) using CF 4, 5 and MX -- with MUCH success. 
Essentially, you just need to create one set of code (cfc "object" or
otherwise) that manages your cache of objects, and make sure to use
that library whenever you want to find an object.  From here, it's as
simple as :

<cfif StructKeyExists(cache, object_id)>

    <cf_find_object_here>
    <cfset cache.object_id = CreateObject(param=foo)>
    <cfif StructLen(cache) GT cache_max>
        <cf_clean_up_cache>
    </cfif>
</cfif>

<cfreturn cache.object_id>

Yes?  Just don't forget to add some way to manage the size of your
cache on the production server; you don't want to consume all memory
on the machine.  And make sure you have some  way of flushing the
cache manually -- it comes in really handy when you're
developing/debugging.

Best of Luck,
Ben Pate

P.S. Martin Fowler is awesome.  And nothing is smarter than
researching before you step off the cliff.  But keep this in mind as
well:  It's easy to get get caught up in "pattern-mania"  -- trying to
name and label and recreate other people's gadgets so much that we
forget to trust our own common sense skills as developers.  To
paraphrase Obi-Won-Kenobi, "Trust your feelings Marcantonio..  Use the
FORCE..."  -- so turn off that stinkin' targeting computer and fire
the damn rockets!  I bet you'll hit your target much better than you
think. :)


On Sat, 8 Jan 2005 18:36:38 -0200, Marcantonio Silva
<[EMAIL PROTECTED]> wrote:
>  
> Oi Aldo, 
>   
> In my very  humble (and beginner) opinion, the singleton is an answer for
> the problem of having only one instance of a class, very usefull for
> example, to instantiate a single application, or maybe even to init a single
> facade of an app. 
> There is an excelent article by Brendon O'Hara on the CFDJ site explaining
> the Singleton Pattern: http://www.sys-con.com/coldfusion/article.cfm?id=624 
>   
> The problem that I need to address is how to have a repository of single
> objects, without having to go to the database to get them everytime I need
> one, 
> and without having to instantiate them all when initializing the app. 
>   
> I got the solution from the source: Martin Fowler's site has a very brief
> description for a patterm that does exactly what I need, here is a quote
> from the site: 
>   
> "Objects can be added to and removed from the Repository, as they can from a
> simple collection of objects, and the mapping code encapsulated by the
> Repository will carry out the appropriate operations behind the scenes.
> Conceptually, a Repository encapsulates the set of objects persisted in a
> data store and the operations performed over them, providing a more
> object-oriented view of the persistence layer." 
>   
> It didn't surprised me that the Pattern is called "Repository Pattern", here
> is the URL: http://www.martinfowler.com/eaaCatalog/repository.html 
>   
> I also found the "Lazy Load" pattern, which will help me on second part of
> the problem, that is not having to load all my objects from the database
> when initializing the app, only when it's really needed for the application.
>   
> I would love to see ColdFusion implementations of both patterns, but since I
> didn�t find it, I will try to figure out by myself.
>  
>   
> Regards, 
>   
>  
> 
> 
> Marcantonio Silva
> Diretor de Desenvolvimento de Produtos - Navita
> [EMAIL PROTECTED]
> www.navita.com.br
> Tel: +55 11 3055.2004 
> Cel: +55 11 7732.4907 (novo) 
> 
>   
>  
>  
>  
> ----- Original Message ----- 
> From: Aldo d'Aquino 
> To: [email protected] 
> Sent: Friday, January 07, 2005 5:36 PM 
> Subject: Re: [CFCDev] Shared persistent objects pattern ? 
> 
>  
> Marcantonio, 
>   
> maybe the Singleton Pattern could be used to grant only one instance for
> this shared repository.  But even in this case we need to implement the
> rules (in any Business Object) to check the repository first or to insert a
> new content in the repository. 
>   
> Anything else? 
>   
> Aldo Menezes d'Aquino Neto
> L�der de Projetos - Navita
> [EMAIL PROTECTED]
> www.navita.com.br
> Tel: +55 48 225.5396
> Cel: +55 48 9911.5598 
>   
>   
>  
> ----- Original Message ----- 
> From: Marcantonio Silva 
> To: [email protected] 
> Sent: Friday, January 07, 2005 4:11 PM 
> Subject: [CFCDev] Shared persistent objects pattern ? 
> 
>  
> Hello, 
>   
> I have a problem and I don't know if there is a pattern for this, or even if
> this is considered a good design: 
>   
> - Due to performance factors, I don't want to go to the database every time
> someone gets a content object, I rather prefere to "store" this object 
> in memory so I can reuse it whenever it's invoked from the view. 
>   
> - In traditional (or procedural) development, I would store an array of
> structures (or queryes) into an application var, and every time someone want
> some content, 
> I would first try to get it from the application array, if it's not there, I
> would go the database, retrieve it and also insert it into the shared array.
>   
> - If someone "updates" one of the the records, I can update the table, and
> the application.array.structure content, so I would have both, 
> the persistent and the "etereal" records both updated. 
> This is all very straightforward to do in CF, I have done it before since CF
> 4. 
>   
> I'm considering to use the gateway in Blackstone to send a message to the
> CFC that will update the database, 
> so I won't even have this database access action contributing for the
> overall system performance. 
>   
> When transporting this concept to objectland, it seems obvious to me that a
> design pattern must be used, 
> both for the "shared object reposytory" and for the "message that will
> update the database" functions. 
>   
> So comes the question: Is there any patterns out there for doing this ? 
>   
>   
> Regards, 
>  
> 
> 
> Marcantonio Silva
> Diretor de Desenvolvimento de Produtos - Navita
> [EMAIL PROTECTED]
> www.navita.com.br
> Tel: +55 11 3055.2004 
> Cel: +55 11 7732.4907 (novo) 
> 
>  
> 
>  ________________________________
>  
> 
> No virus found in this incoming message.
> Checked by AVG Anti-Virus.
> Version: 7.0.300 / Virus Database: 265.6.9 - Release Date: 6/1/2005
> 
> 
>  
> 
>  ________________________________
>  
> 
> No virus found in this outgoing message.
> Checked by AVG Anti-Virus.
> Version: 7.0.300 / Virus Database: 265.6.9 - Release Date: 6/1/2005
> 
> 
>  


-- 

Benjamin Pate
http://smartcms.tigris.org

I have 3 GMail invites for anyone who's interested.
----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email
to [EMAIL PROTECTED] with the words 'unsubscribe cfcdev'
in the message of the email.

CFCDev is run by CFCZone (www.cfczone.org) and supported
by Mindtool, Corporation (www.mindtool.com).

An archive of the CFCDev list is available at 
www.mail-archive.com/[email protected]

Reply via email to