I agree, if you are using the application scope, they must be locked.
However, I fail to see a need to scope the variables (meaning local scope).
If Application.cfm gets run on every page (except includes, cfmodules/custom
tags), then these variables are ALWAYS available to you.

As for the CFIF to determine if they exist, that's the purpose of CFPARAM
with a default attribute.  If the parameter exists, it is used as is,
otherwise it is created with the default value.  I've heard some talk over
time as to performance issues and such regarding CFPARAM and IsDefined(),
but have never seen a definitive answer saying one is most definetly
faster - and my own testing says they are both fast enough (for my purposes
at least).

Some people will recommend putting all your variables in the Request scope
(thereby allowing custom tags to have access to them).  I look at this as
declaring all your variables as global - which is frowned on in other
programming languages (C/C++, VB, Fortran, etc.) because it means more
care/management is required to make sure they are not being inadvertently
changed in some obscure function.  It is better programming practice to use
the smallest scope (local scope) where possible, and pass parameters to
functions (or custom tags in this case).  Those who would dispute this
either know something I don't, or don't have much experience outside web
development (no offense intended...).

As for my own practices regarding variables similar to what you've shown, I
declare a LOCAL scoped structure called App.
Then make each variable a member of the structure.  For example:

<cfscript>
        App = StructNew();
        //Datasources
        StructInsert(App, "DSN", "MyDSN");

        //Locations
        StructInsert(App, "BaseURL", "http://localhost/myapp";);
        StructInsert(App, "BaseDirectory", "/myapp");
        structInsert(App, "IncludesDir", "#App.BaseDirectory#/includes";

        ......
</cfscript>

With a little more thought, it's possible to declare the structure in the
application or session scope, and only create it once.  Just be sure to lock
where needed.  And keep in mind that only YOU know the right answer for your
needs.

My two cents worth.

Shawn Grover

-----Original Message-----
From: Chris Norloff [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, March 26, 2002 1:11 PM
To: CF-Talk
Subject: Re: cfparam vs. cfif/isDefined/cfset


Yes, they MUST be locked.

These look like variables that don't change - I'd do a CFIF test on one, and
if it doesn't exist then set them all.  As long as you always set them all
together, you can use the existence of one to test for all.

This way the app vars are set only once, and don't bog down your pages,
since Application.cfm is called with every request.

Chris Norloff

---------- Original Message ----------------------------------
from: "Earl, George" <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
date: Tue, 26 Mar 2002 11:21:07 -0500

>Here is my application.cfm file:
>
><cfapplication name="appname" applicationtimeout=#CreateTimeSpan(2, 0, 0,
>0)#>
>
><cfparam name="application.appnameroot" default="/appname">
><cfparam name="application.includesDir" default="/appname/includes">
><cfparam name="application.imagesDir" default="/appname/images">
><cfparam name="application.menusDir" default="/appname/menus">
><cfparam name="application.templatesDir" default="/appname/templates">
><cfparam name="application.smapDir" default="/appname/smap">
>
>Should I be locking these cfparam tags? Should I wrap them all in one lock
>or should I lock each one individually?
>
>What is the difference between using cfparam tags as I have above and using
>cfif with isDefined and cfset to accomplish the same thing? Is one method a
>better practice than the other?
>
>Thanks!
>
>George
>[EMAIL PROTECTED]
>


______________________________________________________________________
Structure your ColdFusion code with Fusebox. Get the official book at 
http://www.fusionauthority.com/bkinfo.cfm
FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
Unsubscribe: http://www.houseoffusion.com/index.cfm?sidebar=lists

Reply via email to