Tuesday, July 21, 2009

Refactoring in ColdFusion Builder

First Let’s just discuss what is Refactoring the source code in general.

What is Refactoring ?

Refactoring code in a programs means, one cleans up the code to improve the understandability, maintainability of the source code by changing source code’s internal structure or design, but keeps the overall result of the program same.

So next question one would is “How do I Refactor my program’s source code ?

First thing, it must not be done manually by one, as it’s more prone to human errors. Refactoring has to be an automated process and it’s a feature of and provided by the most of the IDE.

ColdFusion Builder is the new IDE provided by Adobe for Rapid development of ColdFusion applications. ColdFusion builder allows user to Refactor their application source code.

So one may argue…What’s the big deal with ColdFusion Bulider? most of the IDEs provide refactoring…

The big deal here is that it’s very challenging task for a non-typed language to provide Refactoring feature. ColdFusion being a loosely typed language, it’s not that straight forward to implement Refactoring for ColdFusion Builder, but still an attempt has been made to provide this feature in ColdFusion Builder to make life easier for CF developers.

What should I refactor to improve the understandability or maintainability of my source code?

During the application development cycle, one may hurry to complete the application due to various reasons and hence may end up using the variable names, function names, filenames and many other source code constructs such that it becomes difficult to understand for other developer, making maintainability and understandability of the application difficult. In order to avoid such situation, developer should take corrective actions to Refactor the above mentioned code constructs for making it easier to comprehend for other developers.

What sub-features does ColdFusion Builder offer for Refactoring?

ColdFusion Builder provides the following sub-features in Refactoring.

CFC UDF Refactor

In the following component, let’s say…one want to rename test() function to test123(), so it means that all the valid instances of the test() function through out the application should get refactored, including the references in the same component but other functions referring it.



<cfcomponent namespace="Refactor.abc" extends="def.b" >
<cffunction name="test" access="remote">
<cfreturn 1>
</cffunction>
<!---Test 2 Method --->
<cffunction name="test2" access="remote">
<cfreturn test()>
</cffunction>
<!----Test Method 3 from def\b.cfc---->
<cffunction name="test3" access="remote">
<cfreturn foo1()>
</cffunction>
</cfcomponent>


So what should one do to achieve it? Just left click on the function name, and then Right click to open the Menu, as shown in the following screenshot.





Click on the Refactor->Rename menu item and it will open up a Input dialog as following,


Now, provide the “New Name” for the test method and once you do that Disabled Preview button is enabled. Notice that we are enforcing user to preview the changes being done by ColdFusion Builder. Reason being at certain places, CF can not determine if the instance has to be considered for refactoring or not and so in such cases, it’s upto user to decide if the unsure instances (unchecked) shown in the preview, has to be considered or not. If required user should check it before preceding by pressing “OK” button.

Notice that even the URLs in / tags, which are referring to this test() method are being considered for refactoring. Such URL references are possible to consider for refactoring only when the Server is registered with ColdFusion Builder and the URLs are very much valid and accessible, which otherwise is not possible.

Note: User can Undo the Refactored changes by pressing Cntrl+Z from keyboard.

So we have seen how to refactor an UDF in CFC. Similar way, we can also perform the following operations.

  • Refactor CFM UDF
  • Refactor CFC UDF
  • Refactor Funcion Local scope variables
  • Refactor Function Argument Names
  • Refactor the CFC Name
  • Refactor CFM Name
  • Refactor Custom Tags
  • Refactor CFQuery Names
  • Refactor Scoped Varaible names like This/Application/session etc.. variables.
  • Refactor UnScoped Global variables in a CFM/CFC.
  • Refactor Variables in Included and Includee file.
  • Refactor ORM CFC which should also get reflected in ORM Entity Methods.
  • Method Refactoring through – “Application Varaible Mappings” in CF Builder

Note: To refactor the CFM/CFC/CustomTags, Explore the Template thorough Project Navigator, Right Click on the Template and select Refactor->Rename menuitem, as shown in the following screenshot.


Note: File/Template Refactoring is allowed only for, CFM/CFC files. TXT files or any other types of files can not be refactored.

Method Refactoring using "Application Variable Mappings"

Assume a scenario where an Application variable is defined for a CFC Object as following.

<cfset Application.appVar = createObject("component","abc.AppCFM.a")>

And now, the CFC function called Method() is invoked as following in some other template
<cfset Application.appVar.Method()>


In such a case, While Refactoring the Method() function, If a Varaible mapping is created for the application variable, then the above invokation usage will be considered for Refactoring, otherwise it will be ignored.

To Create Application Variable mappings.... Right Click on the Project >Properties window>ColdFusion Variables Mappings>Click on New button>enter Variable name as "Application.appVar" and Mapped To as "abc.AppCFM.a", Click OK button.


References Search

Not that always one needs to refactor the Code, But there are times, when one only wants to see/find the references of the Methods/Varaibels/CF templates etc…

In such a case, one can use the References option in the Right Click Menu, as shown in the following screenshot.



Similar option is also available for Template search from Project navigator view.
Reference search results will be shown in the Search panel as shown below.



39 comments:

Govind said...

Look like Coldfusion Builder is interpreting CFC name relative from the Project's root folder.

But in productive sites CFCs spreads across multiple folders like:

/.../cfc1folder/f1/cfc1.cfc
/./cfc2folder/f2/f3/cfc2.cfc

These CFCs will be consumed in some other CFM/CFC with relative name like:

f1.cfc1
f2.f3.cfc2


And ColdFusion server understands CFC's full name from the paths provide under 'Custom Tag Paths' section of CF Admin.

How Coldfusion Builder helps in these scenario either during Refactoring or Referencing or Code Assit?


Is there any option to let Coldfusion Builder know the list of 'Custom Tag Paths'?

-Govind

Jayesh Viradiya said...

CFC path resolution mechanisim is in place in ColdFusion Builder for the scenarios mentioned by you. In CF Builder a project is associated with CF Server, and hence it's easy to find out custom tags, CF mappings and also resolve CFC paths from webroot or relative to Project folder which is also under the workspace created under wwwroot. So Content Assist or Refactoring will know how to resolve the CFC references.

bobbyakadizzy said...

Given that CF is a such a loosely typed language what is your general strategy on tackling refactoring?


I can easily come up with a number of scenarios for which it's not possible to know the refactoring using static analysis!

How about this simple example:

Suppose I have component A and component B both with UDFs m. How would I be able to refactor the method m for component A? What does the editor do to help you out in this situation where it is ambiguous?

[cfset x = createObject("component", "A") /]
[cfif expressionNotKnowUsingStaticAnalysis]
[cfset x = createObject("component", "B") /]
[/cfif]
#x.m()#

And since this scenario can play out in so many ways, how effective do you expect refactoring to be on real codebases?

Jayesh Viradiya said...

Hi Bob,

Regarding 'Number of Scenarios', while developing this feature, even we had this thing in mind and have tried to cover most scenarios.

Regarding your UDF ambiguity example, this is very much a possibility, as there will be times when certain thigns will be clear only on Runtime and not compile time. We display such ambiguous cases in the preview screen but those cases will be UNCHECKED, leaving upto user to decide if to refactor or not. And also, as I have explained in my post, we force preview on user to review, before pressing the OK button. So moral of the story is, we leave upto user to decide on such runtime ambiguous cases.

Raghuram Reddy said...

in what way it is different from Dreamwever find/replace in the specified folder/file/opened files?

Jayesh Viradiya said...

Find/replace is just the content based dumb keyword matching searching on files/folders...here user has to be on his toes while performing this operation as otherwise it will replace unnecessary instances of the matching keywords also, resulting in broken source code. Refactoring is an intelligent technique in IDE to find/replace the right insntaces/references and it just doesnt go by the matching names.

jacks said...

hi! i like your blog.. thanks for the sharing.. easy to download

michaelvk said...
This comment has been removed by the author.
Troy said...

Hi,

I recently came across your blog and have been reading along. I thought I would leave my first comment. I don't know what to say except that I have enjoyed reading.

Nice blog. I will keep visiting this blog very often.

-
Delphi development

Bob said...

I really appreciate the information you have provided in this blog especially about coldfusion. Thanks a lot! Very nice! health insurance california

Admin said...

This blog is awesome full of useful information that i was in dire need of.

Affiliate Management Solutions

Admin said...

This is really good advice. i also like this! thanks so much for this post!

Buy A Ready-Made Logo

golf stayz said...

Your article is extremely impressive. I never considered that it was feasible to
accomplish something like that until after I looked over your post .

Gold Coast golf
Gold Coast golf holidays
Sunshine Coast golf
Sunshine Coast golf holidays
Group golf holidays
Australian golfing holidays
Discount golf
Golf trips

Craig Chilvers said...

I just wanted to leave a comment to say that I enjoy your blog. Looking at the number of comments, I see others feel the same way! Congratulations on a very popular blog.

Boat Finance

Admin said...

This is definitely an amazing website for a beginner to get started. Timeline Facebook

Admin said...

Nice post having excellent contents.This is exactly what I’ve been looking for.Thank you very good. Applications for BlackBerry

Susan Gray said...
This comment has been removed by the author.
Susan Gray said...

ColdFusion is still in market I don't think so? How many companies are using ColdFusion as a software platform? Now, Developers are using PHP or JavaScript for programming and very of them know ColdFusion.

Regards,
Susan Gray
Social Media App

asif ifteakhar said...

Thank you for the great article I did enjoyed reading it, I will be sure to
bookmark your blog and definitely will come back from again.
I want to encourage that you continue your great job, have a good day

north london business oppotunities
london business group

premiumflag banners said...

Nice article you got here. It would be great to read more about this theme. The only thing it would also be great to see on this blog is some pictures of any gizmos.

feather flag
flag banner
custom flag banners

asif ifteakhar said...

Thank you for the great article I did enjoyed reading it, I will be sure to
bookmark your blog and definitely will come back from again.
I want to encourage that you continue your great job, have a good day

north london business oppotunities
london business group
london nwtworking groups
london business networking

DexSmart Matt said...
This comment has been removed by the author.
joana lui said...

It is great to observe somebody put enough craze towards a matter. I'm thankful that I stumbled upon this process. I am lucky I used the time to read on past the 1st paragraph. You have got a whole lot to say, very much to offer. I really hope guys understand this and look into your page.

safety deposit box
bank safety deposit boxes
mailbox post
residential mailboxes
gold bar for sale

Boris kreiman said...

I recently came across your blog and have been reading along. I thought I would leave my first comment. I don't know what to say except that I have enjoyed reading what you all have to say


real estate law
how to buy a house
first time home buyer programs

golf stayz said...

Your article is extremely impressive. I never considered that it was feasible to
accomplish something like that until after I looked over your post .

فروشگاه کتاب
فروش کتاب
خرید کتاب
خرید اینترنتی کتاب
فروش اینترنتی کتاب
خرید کتاب اینترنتی
فروشگاه اینترنتی کتاب
فروش کتاب اینترنتی

golf stayz said...

Your article is extremely impressive. I never considered that it was feasible to
accomplish something like that until after I looked over your post .

فروشگاه کتاب
فروش کتاب
خرید کتاب
خرید اینترنتی کتاب
فروش اینترنتی کتاب
خرید کتاب اینترنتی
فروشگاه اینترنتی کتاب
فروش کتاب اینترنتی

DexSmart Matt said...

Nice post. It would be great to read more about this theme .

safe investment
forex investment
managed accounts
forex managed account
managed account
forex managed
pamm account
instaforex

Felix Smith said...

It is in reality a nice and helpful piece of information. Local Advertising

Syed Faizan said...

This is very interesting. thanks for that. we need more sites like this. Lux Style Awards

joana lui said...

I just wanted to leave a comment to say that I enjoy your blog. Looking at the number of comments, I see others feel the same way! Congratulations on a very popular blog.

Metropolitan Safe Deposit Boxes Limited or Bank Safe Deposit Boxes limited (‘Metropolitan’) was originally formed in 1983 to construct and operate the Belgravia safety deposit box , Metropolitan’s safety deposit box facilities are strategically placed in the inner central area of Metropolitan London. The Company is the largest independent provider of Safe Deposit Boxes
Bank Safe Deposit Boxes Safe Deposit UK Bank Safe Custody Safety Deposit Boxes
Safe Deposit Facilities Safe Heaven this service in the United Kingdom. The two vaults provide thousands of boxes in 16 different sizes ranging from one-foot square and two-inch high boxes up to walk-in secure storage areas. The locations of the vaults are in Knightsbridge and St John’s Wood.

Felix Smith said...

I am really grateful to you for providing me with such useful information. Thanks a lot. Keep blogging. Hajj Packages
Economy Hajj Packages
Express Hajj Packages
Silver Hajj Packages
Executive Hajj Packages
Super Fast Hajj Packages
Hajj From INDIA Packages
Hajj e Badal Packages

Felix Smith said...

Nice post. Thank you for taking the time to publish this information very useful! I'm still waiting for some interesting thoughts from your side in your next post thanks! Wholesale Towels
Wholesale Cleaning Towels
Wholesale Hand Towels
Wholesale Microfiber Towels
Wholesale Salon Towels
Wholesale Shop Towels
Wholesale Vending Towels

Felix Smith said...

Your posting will accelerate our knowledge as well as our mobile globalization. It is very useful too. Hajj Packages

Felix Smith said...
This comment has been removed by the author.
Felix Smith said...

Thanks for sharing your website.This blogs are very informative. I really say thanks to you. Used Police Cars

Mia Smith said...

It is so lucky to read your blog,it is full of useful message.I wish we both can do better in the future.It great honor if you can visit our website,and give us some suggestion. Dawn Travels
Hajj Packages
Umrah Packages

Tina brian said...

Awesome post thanx for sharing this one realy helped me :)
Labaik Tours
Umrah Packages
Hajj Packages

Worldlatest carbd said...

Charge card help considerably boost additional improvements is normally mostly high-priced, though while even though this specific, any individual check-up charges associated with low-cost charges mutually and also great home home finance loan obligations, it could maybe fully reported indoor a lot more cost-effective with regards to the help considerably boost additional improvements considerably boost. It is best to fully need to obtain complicated that you can devote $793 in hardly ever aspect mutually and also charges that features real estate personalized cash loan indoor normal normal classic normal classic traditional bank.check cashing costa mesa

justin adams said...

Your usually regular installments is sometimes found distinctive with eight throughout this technique on twelve bi-week by week parts, or even still, at intervals the event that your equity credit line depends on your individual Sociable Stability acquire, thus we have got a slant to appear at out for have associate title loan inclination to might began your installments to urge got from 3 to four customary month to month prices. Dependably centered on parts manual for prove a reduced check whole that's the larger match your funds.