I only use transactions when I'm doing more than one insert, update, or
sproc call. My question to Brad was how do you handle these possibilities
without a cftry? The easy way would be to let it fail to your global error
handler (onError or error templates) but that doesn't fix the issue...just
puts a nice pretty face on it.

Again, just curious...

On 2/15/06, Tim Heald <[EMAIL PROTECTED]> wrote:
>
> Then it is appropriate to use transaction processing and try/catch logic.
>
> You're dealing with more complex objects at this point already, dealing
> with
> the network and another server, this way even if you lose the network in
> the
> middle of running a proc or something it will roll back.
>
> > -----Original Message-----
> > From: John C. Bland II [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, February 15, 2006 1:10 PM
> > To: CF-Talk
> > Subject: Re: Try/Catch vs. direct error handling
> >
> > So, in the case of a simple query what happens if your
> > datasource can't connect? (db down, etc) How do you handle
> > this error with an open cfquery?
> > onError in App.cfc?
> >
> > Just curious...
> >
> > On 2/15/06, Dave Carabetta <[EMAIL PROTECTED]> wrote:
> > >
> > > On 2/15/06, Michael Dinowitz <[EMAIL PROTECTED]> wrote:
> > > > This is a question of best practices and why. When I know
> > there's a
> > > chance of a specific error, I tend to code specifically to
> > handle it.
> > > Others code generally using try/catch. Which is seen as
> > best in other
> > > languages and why? I doubt there's any real performance
> > issue between
> > > them, so it's a question of industry standard and style.
> > > >
> > > > For example, if I know an ID is needed on a page and it
> > has to be a
> > > numeric I'd do:
> > > > <CFIF Not IsDefined('ID')>
> > > >         An ID is needed
> > > > <CFELSEIF Not IsNumeric(ID)>
> > > >         The passed ID needs to be numeric </CFIF>
> > > >
> > > > Others do:
> > > > <CFTRY>
> > > >         <cfparam name="ID" type="numeric">
> > > >         <CFCATCH>
> > > >                 You must pass a numeric ID
> > > >         </CFCATCH>
> > > > </CFTRY>
> > >
> > > Actually, there is a performance difference between them in theory.
> > > try/catch introduces more overhead into the performance due to its
> > > need to run, evaluate, and then test the various catch
> > conditions for
> > > a best match. With the isDefined(), it either exists or it doesn't.
> > > Very simple and "brute force." Here are my two rules that I would
> > > submit as best practices:
> > >
> > > 1) In CFMX 6 and 7, every internal scope is a struct, and, as such,
> > > the struct-related functions have been heavily optimized. (I think
> > > there were some exceptions for scopes like "cookie" in previous
> > > versions.) Therefore, I almost never use isDefined() anymore, for
> > > reasons that have been documented both here and on various
> > blogs. My
> > > team's standards dictate that structKeyExists() be used
> > around checks
> > > for all variables:
> > >
> > > <cfif structKeyExists(variables, "id")> ...
> > > </cfif>
> > >
> > > <cfif structKeyExists(url, "id")>
> > > ...
> > > </cfif>
> > >
> > > The only time I can think of where I use isDefined() is in
> > something
> > > like an error e-mail where I want to check if there was a
> > form scope
> > > in the request that failed so that I can dump it or skip it.
> > > isDefined() will go through every possible scope it can,
> > including the
> > > CGI scope to find the variable being checked. That puts a
> > > (comparatively) noticeable overhead on the request as opposed to
> > > targeting a specific scope or scopes. I might be forgetting another
> > > one-off example, but you'll find most of the time that isDefined()
> > > just isn't needed.
> > >
> > > 2) Put cftry/cfcatch around code snippets that rely on
> > non-ColdFusion
> > > technologies, and around snippets of code that can
> > gracefully handle
> > > an exception. I don't put it around each and every query because I
> > > know that if a very basic query if failing, then I have bigger
> > > problems that a try/catch isn't going to solve. However, we
> > interface
> > > with a lot of non-CF technologies at my company (i.e.,
> > Python external
> > > methods, web services, etc.), and I don't necessarily have control
> > > over their uptime or availability (for example). Therefore,
> > I need to
> > > be able to display a "system is down" message and/or send
> > an e-mail to
> > > myself as an alert. Other examples include POP and FTP access.
> > >
> > > try/catch should be used only when necessary. As for the reply that
> > > noted he has a developer who puts try/catch around everything,
> > > education is the best remedy there. Have him research
> > try/catch both
> > > in LiveDocs and across the web to show why his approach isn't
> > > recommended.
> > >
> > > Regards,
> > > Dave.
> > >
> > >
> >
> >
>
> 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Message: http://www.houseoffusion.com/lists.cfm/link=i:4:232364
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=89.70.4
Donations & Support: http://www.houseoffusion.com/tiny.cfm/54

Reply via email to