The simplicity of ColdFusion 9 Part 2
Continuing my list of ColdFusion 9 enhancements which can help you write less code...
New
way of creating objects
To instantiate a ColdFusion Component (object) pre-CF9, I would have used CreateObject()
:
ID = 1;
user = CreateObject( "component","model.User" ).init( ID );
This can now be shortened to:
ID = 1;
user = New model.User( ID );
The new
keyword will automatically call and return the component's init
method (if it exists) passing it the arguments you specify.
If the path needs to be dynamic (i.e. it depends on a variable), then just surround it in quotes:
ID = 1;
modelVersion = "20081213";
user = New "model.#modelVersion#.User"( ID );>
Abbreviating at the cost of clarity should be avoided, but this is not only shorter, but more "English-like" and therefore clearer.
Application-wide datasource
Since early in my CF career I've followed good practice in abstracting the name of the application datasource to a global variable, such as application.dsn
, that can be referenced whenever running a query.
<cfquery name="q" datasource="#application.dsn#" username="#application.dsnUser#" password="#application.dsnPassword#">
SELECT ID FROM posts
</cfquery>
With CF9.0 came the ability to specify the datasource name in Application.cfc...
this.datasource = "blog";
...and the CF9.0.1 updater belatedly let you specify a login:
this.datasource = {
name="blog"
,username="coldfusion"
,password="letmein"
};
Which leads to a delightful de-cluttering of our cfquery
tags.
<cfquery name="q">
SELECT ID FROM posts
</cfquery>
<cfquery>
DELETE FROM posts WHERE ....
</cfquery>