Fusebox Criticism
In his most recent blog entry, Hal Helms mentioned that Fusebox needs critics. Since I am a defector from Fusebox but feel a debt to that community, I will do my best to fill the role.
I should start by saying that despite my defection from the ranks of Fuseboxers, I think it is a good framework for programmers and if I had it to do all over again I would still choose to have used it (although not on the last project on which I used it - more later). I am indebted to all of those who have contributed to it.
A Little Background
I started using Fusebox in mid-2001 (in the days of Fusebox 2). I liked it but it didn't seem quite "right" to me. I heard rumors that Fusebox 3 would be a big improvement. So I convinced my employer at the time to foot some of the bill and off I went.
The conference was great and I got to find out about Fusebox 3 and hear some great presentations. I even got sit down with Fusebox luminary John Quarto-vonTivadar (who turned out to be a really friendly, energetic guy).
I saw that Fusebox 3 met my needs and while it was a bit of a departure from Fusbox 2, it would be (according to the presenters) the foundation upon which future versions of Fusebox would be built - invest now and your future code will be saved. I was sold!
I used Fusebox 3 until about a year ago when I became a bit disillusioned with it. Why?
A few things in fairly close temporal proximity:
- The release of Fusebox 4
- Forming my own business and working with designers (I can't do design)
- CFCs
It may be great, but it is not a simple upgrade. The much-touted stable "fusebox" structure? Gone! Replaced with a "myfusebox" structure. It would have been pretty easy (in my humble opinion) to name the new structure the same as the old structure and keep some of the old variables. I mentioned my disappointed on this point and was rebuked.
Please don't misunderstand me; I understand that a lot of work was put in Fusebox for free and I certainly appreciate it. I just disagreed with this move. Frankly, it rankled me a bit. Even so, I figured that I would learn Fusebox 4 eventually. Fusebox had been good to me after all.
Where's My File!
About a year ago I worked on a project with a design firm (a new client for my new business, oh my!). I extolled the virtues of Fusebox. Organized code! An army of Fuseboxers waiting to replace me should I get hit by a bus! They assented to let me use Fusebox for the project. I even purchased a copy of a ColdFusion shopping cart that was supposedly Fusebox 3 compliant.
Good times, right? Wrong! They hated it. Why? When they wanted to make a simple text edit on a page that wasn't database driven (it happens) or on a static part of a database-driven page (also happens), they couldn't find the file. I tried to explain the beauty of the structure - no luck. I kept the client, but on the next project they had one requirement "No Fusebox". Ouch!
CFCs are "More Better"
Around the time when CFCs had been announced but not yet released (just before the release of CFMX), I went to lunch with a friend of mine and his coworker - all of us ColdFusion programmers. The coworker proposed that CFCs would be the end of Fusebox - or at least the need for Fusebox. I argued passionately that he was wrong (acting very much the zealot despite myself). I argued that Fusebox still held a great many benefits with or without CFCs.
Later I tried them. No effect on my earlier position at all! Well, maybe. Some. Just a little...
The thing is that CFCs solved most, if not all, of my needs. That is to say, that most of the things I got from Fusebox (separation of logic and display, code reuse, even layouts - more on that later in a later post) I could achieve with CFCs. My URLs looked nicer. Designers and regular HTML-folk that needed to edit files could find them easily (and yet did not have to look through - or be tempted to edit - my ColdFusion code). Brilliant!
That's Quite a Rant, But Where's Your Beef?
Well, after a long rant like that I should be able to summarize some criticisms of Fusebox (that was supposed to be the point, after all). Despite the length of the rant, I basically have three complaints.
- I don't want to migrate to Fusebox 4 because I have no trust that any Fusebox 5 won't be as big a departure as was Fusebox 3. (admittedly this is a small issue).
- Hub and Spoke.
- Messy URLs and one URL variable per page off-the-bat (some SEO experts warn against too many URL variables). I could use SES URLs (work added by the framework).
- All pages going through one file messes up my traffic reports. I could configure my traffic reports (work added by the framework).
- ColdFusion error reporting always reports the same file (work added by the framework).
- I want non-programmers to very easily edit HTML while being discouraged from editing logic code. Fusebox makes both difficult, but equally so.
On what kind of project would I use Fusebox? One in which only Fusebox programmers needed to make edits of code. One which is big enough to justify the complexity of a framework (more than a five or six page site, way) but not so massive that Fusebox stuff seems to get in the way. Preferably one that isn't on a public-facing web site.
Well, this turned into a much longer rant than I had envisioned. Hopefully I stumbled on something that someone will find of value in all of that.
Thanks for the post. I certainly understand you being upset about Fusebox changing from version to version. I think we've got that particular bit of bad behavior licked, but time will tell...
On the issue of CFCs replacing Fusebox, I don't understand your position. It may be that this is because I favor a Model-View-Controller architecture where the view pages are just what they've always been (CFML and HTML), the model is done in objects (using CFCs and/or Java), and the controller? Well, with MVC, you still need a controller and that's exactly what both Fusebox and Mach-II are.
On your three complaints...
1. Agreed. As I said, I THINK we have this solved.
2. Messy URLS: SEO issues are much bigger than having URL variables. Even SES URLS won't really do what you want: to get your page to show up in the first 20-40 hits of a Google search. There are many other issues involved. I know a little about this because John Quarto-vonTivadar has Webtrends for a client. In fact, John has been working on some very cool stuff that will go far beyond the simplistic SES URLs. That should show up later this year in FB 4.2 or 4.3.
Messing up traffic reports: Webtrends and most such programs can be configured to work fine with Fusebox, but yes this requires configuration on your part.
Error reporting: this is something that FB 4.1 has done a much better job with. There are very specific error templates called when an error occurs. And, in fact, you can create your own custom error templates easily and have Fusebox call them when a custom error occurs.
3. Non programmers editing HTML: I don't understand this. Not having logic in display files should make it much EASIER for non-programmers to edit.
All that being said, I respect your opinion and it's just such "rants" as this that helps us to make FB better. And it's equally true that having ANY framework (Mach-II, Struts, Fusebox, Maverick, etc.) does add a layer of abstraction onto the system. For some, this abstraction layer isn't worth the cost.
Again, thanks for the feedback.
Hal Helms
Regarding my opinion tht CFCs obviate the need for Fusebox. I may not have made my point clear on that one. I recognize that Fusebox can be used with CFCs. It is just that prior to CFCs, I found it so hard to have a well-organized application without Fusebox that the problems that I mentioned were easier to deal with.
Regarding the issue of URLs. I concede that I haven't yet tried Fusebox 4 and I should do that. I do recognize that all of the issues brought up with the structure of the URLs can be worked around, but in certain environments that can be difficult. Moreover, the resulting URL annoys me personally.
As for non-programmers editing HTML, I thought it would make things easier as well. In practice, however, this hasn't been my experience. I can separate the HTML from the logic without Fusebox and I can put the HTML in the file called by the browser. Doing so allows designers that I work with to easily find the HTML. They have not been eager to learn the Fusebox structure in order to find the correct file (and since it is usually THEM paying ME, I am not in a position to force the issue).
I should also stress that I actually used (and liked) Fusebox for some time. I really appreciate all of the work that has been put into Fusebox. I do miss the levels of abstraction. I am trying to accomplish that without Fusebox and I have been doing some reading on OO and design patterns to learn the necessary skills, but it will admittedly be a while until I am at the level that I need to be for that. I need to find another good framework. If I can find a framework that I find half as useful over the next two year as I found Fusebox in the time that I used it, I will be very happy indeed.
I have found in myself a history of reversal of opinion. It wouldn't take much for me to reverse my opinion of Fusebox again in the future.
Thanks!
Steve Bryant
Visit me @ http://steve.coldfusionjournal.com/