Okay, so it’s not that I hate Fusebox — I just wanted an inflammatory subject line because that’s the kind of mood that I’m in. What really annoys me is cleaning up after most Fusebox developers. For whatever reason, the mental processes of Fusebox developers are just not compatible with my own, which probably says more about me than it does about Fusebox or its developers, but there you go.
Anyway – on with the list.
Badly Over-Engineered Designs
Ever had to maintain a small Fusebox application that you didn’t write? It sucks. The same can be said for just about any code that you have to maintain that you didn’t write, but for me it seems that fixing broken Fusebox apps will forever be my lot in life.
No matter what anyone tells you, even if it’s Hal Himself, Fusebox should not be used for small apps. The whole point of all those little act and qry and dsp files is that you are supposed to reuse them in multiple places. If your app is so small that you aren’t reusing any of them … why are you using Fusebox? And don’t try and give me the whole "so that my DBAs/HTML Designers don’t have to understand ColdFusion to change the queries/layouts" crap. When was the last time any programmer let a DBA or Designer touch a CFM file? I’d put dollars to doughnuts that any DBA or Designer bold enough to go in and do that sort of thing isn’t going to be bothered by a few extra lines of CF in the file.
In most cases, especially for small shops and small apps, using Fusebox is like giving an organ grinder a silverback gorilla instead of a capuchin.
The bad practices that go with it: cfsilent
I hate hate hate the cfsilent tag. It’s an arrogant tag that goes hand-in-hand with Fusebox, and I have nothing but ire for it. For whatever reason, Fusebox developers seem to prefer the cfsilent tag to the enablecfoutputonly attribute of the cfsetting tag, mostly with the excuse that keeping track of the layers of cfsetting is too hard. Bogus. One each at the first and last lines of every CFM file — how hard is that to keep track of? Make it your default template in CFEclipse/Dreamweaver/Homesite.
I say that cfsilent is arrogant because adding it to your code essentially proclaims that the code, and any code that page calls, is perfect and will never need to be debugged. How do CF developers do debugging? Lots of tracing with cfoutput tags, right? If some yahoo has put a cfsilent tag in their fbx files and you’re trying to figure out why the cfoutput in the qry file isn’t displaying anything … that’s a lot of time wasted until you figure it out. "But a qry file should never have output!" Yep. And your code is always perfect. Right. Sure.
Do I even need to say anything here? Anyone who has ever had to maintain a Fusebox app with more than a dozen fuses will know what I mean.
Exit Fuseactions, XFAs, are the devil. No. They are good in theory, but they are horrendous in practice.
Look, the main argument for Fusebox is the switch file and that it is the spine of your application and that you can look at it and know exactly where the logic flow will take someone. Setting an XFA in your switch file is okay, because it helps keep your program flow on track. But ever seen an XFA set anywhere else? I have. All too often. Setting an XFA outside of the switch file destroys any sort of traceability that you thought you had.
CF Server Mappings
For whatever reason, Fusebox and CF Server Mappings seem to go hand-in-hand. A thousand tiny files in one directory, then one or two more in a directory on a completely different drive, mapped in with a server setting and called with cf_ syntax. WTF?!?!? I’m not saying it’s only Fusebox developers that do this, but in my personal experience I’ve never seen it done by anyone who wasn’t a Fusebox fanatic.
I don’t mean to dog on Fusebox. Actually, I should write a check to Hal, as the majority of my salary for the last few years has come from me fixing Fusebox apps that someone before me had written that then broke. But, seriously, it’s just as easy to write horrible non-Fusebox code as it is to write horrible Fusebox code. And I’m certainly not going to say that all the code I’ve written in my life has been perfect. But still. I can only clean up so many messes before I feel the need to advocate that people stop making the messes in the first place.