Finishing up my series on my idea of why I am drawn to ColdFusion is my final point – ColdFusion has many roles to play. ColdFusion doesn’t force you to use only it for all layers of your web application. You can selectively choose to use ColdFusion for as much or as little of your application as you want. ColdFusion doesn’t just allow this, like everything else, it makes it easy. Off the top of my head here are some uses cases for ColdFusion in your application:
- Traditional HTML generated application by ColdFusion
- Complete client layer using built in ColdFusion AJAX components
- Back end to AJAX driven front end using cfajaxproxy
- Back end to Flex application using Flash Remoting or LiveCycle Data Services ES
- Bridge between your application and messaging services (JMS, SMS, XMPP) with Event Gateways
Let’s start with the traditional HTML generated application:
Sure, I can just take a query and pass it to an HTML renderer and… instant data screen. ColdFusion can do the entire thing. But that code would provide a poor user experience. That table is pretty much just phoning it in. Instead, I can use ColdFusion’s built in AJAX features to make a better UI using a datagrid.
First I have to move the query to a CFC, and run it through a simple function that formats the data for the datagrid:
Once that is done, I can call that CFC from a datagrid component:
Or I can instead opt out of using ColdFusion UI components, and either roll my own or use an established framework (both using cfajaxproxy):
var cfData = new cfData();
datatable = document.getElementById('dataTable');
res = cfData.list();
table = queryToTable(res);
table = document.createElement('table');
tbody = document.createElement('tbody');
row = document.createElement('tr');
cellFname = document.createElement('td');
txtFname = document.createTextNode(res.DATA.FIRSTNAME[i]);
cellLName = document.createElement('td');
txtLName = document.createTextNode(res.DATA.LASTNAME[i]);
cellCity = document.createElement('td');
txtCity = document.createTextNode(res.DATA.CITY[i]);
cellState = document.createElement('td');
txtState = document.createTextNode(res.DATA.STATE[i]);
But let’s say that you instead wanted to interact with some sort of other interface like SMS, JMS, or as in the following example, an XMPP client using Gtalk:
That’s a lot of mileage out of that little query. From that simple query, I’ve rendered a plain old HTML page, a ColdFusion AJAX display page, a custom written AJAX-driven page, a Flex display component, and a Gtalk Bot. That’s what I mean by ColdFusion can play lots of roles. It can do the whole thing, or just part of it. Combine that with the concepts in my previous post, and ColdFusion can do the following:
- Act as a front end to business logic written in Java or .Net
- Act as a messenger from a back end written in Flex or Java to a front end written in Flex
- Act as a messenger between all of these and a messaging service
- And of course, it can be your front end, back end, and messenger all in one
The idea here is that when you use ColdFusion, you can either use it full hog, or selectively swap in technologies that better address your needs. ColdFusion doesn’t lock you in; quite the opposite, it opens doors for you.
One thought on “ColdFusion Has Many Roles to Play”
Very, very nice post, Terry. Not only a great apologetic for CF, but a succinct and compelling demo of functionality to help the converted appreciate the power at their fingertips. Thanks for doing it.
Actually, this could make a nifty user group talk (just showing the examples, and expanding on things a little). If you may be interested, I’m always happy to have any CF speakers on my weekly Online ColdFusion Meetup (coldfusionmeetup.com), and now (in your new role) as much as before, you’d be most welcomed. If you may be interested, drop me a note: charlie at carehart dot org. If you can’t do it for some reason, flat out too busy for several weeks, let me know if you’d prefer to have me put one together. It really does deserve to be highlighted. I’d even propose doing it as an Adobe Dev Center article, and again if you can’t get the time to do it, I’d be willing to co-author something.
Keep up the good work.