Showing posts with label ColdFusion Builder. Show all posts
Showing posts with label ColdFusion Builder. Show all posts

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.