Sunday, October 2, 2005

Fusebox and Frameworks 2005 Wrap-Up

The Fusebox and Frameworks 2005 Conference was this past week and as always, Michael and all the folks at TeraTech put on a first class event. It was fantastic to get the opportunity to talk to attendees about Mach-II and the exciting stuff we put in the 1.1.0 release (available very soon!) as well as what we have planned for future releases. There's a ton of very exciting stuff going on with CF frameworks in general so here's my roundup of what I found most interesting at the conference.


Mach-II:I gave my Head First Mach-II presentation twice (PowerPoint and sample app code available soon), led a Mach-II Birds of a Feather session, and Ben Edwards gave a Mach-II Under the Hood presentation, so Mach-II had a strong presence at the conference. I got comments from lots of attendees after my presentation that they were now no longer "afraid" of Mach-II, and current Mach-II users were very excited to see all the activity going on in the Mach-II community these days, so this was fantastic. With the 1.1.0 release we're going to have a lot more and a lot better documentation, and when I have time I'm going to do my presentation as a Captivate demo, so you should have some excellent resources in the very near future.

I think the thing to remember about Mach-II is that if you put in the time to learn OO (which is a MUST these days!) then Mach-II is actually VERY simple to learn. It's based on some very basic principles and once you get the hang of those it's off to the races. Mach-II is a mature, stable framework that's proven itself in numerous very large applications so it's definitely worth a look if you haven't checked it out yet.

Spring, ColdSpring, IoC, and AOP: I know, lots of acronyms in there, and I'll be saying a lot more about all of this in the future. Max Porges gave a GREAT presentation about using Spring with a Java model in ColdFusion applications. At its most basic level, Spring is a framework built on the idea of Inversion of Control (IoC), aka Dependency Injection, and also supports Aspect Oriented Programming (AOP). This is extremely powerful stuff based on the simple idea that your model should be completely unaware of your framework, and also that each object in your model should be as unaware of other objects in your model as possible.

If that sounds great but you'd prefer to build your model in CFCs instead of Java, you'll definitely want to check out Dave Ross's ColdSpring as well as Chris Scott's ColdSpring AOP. Dave and Chris are working together (and quite obsessively, I might add!) on both of these initiatives and coming up with some amazing results. I talked with them pretty extensively at the conference and really like where they're going with things. I'm going to be using ColdSpring on an upcoming project so I'll have a lot more to say about it in the not-too-distant future.

Fusebox: Fusebox is of course alive and kicking, and even though I was never a fan in 3.0 days, Fusebox 4.1 has a lot of nice features and is definitely worth checking out, particularly if you don't have much OO experience. The very cool thing about Fusebox is that you can build extremely well-organized, easy to maintain applications using procedural principles, then move into using an OO model with Fusebox, and at that point if you're looking for something more purely OO, you'll more or less have the skills you need to move into something like Mach-II. I also love all the fantastic tools available for Fusebox, and the fact that you can very easily farm out discrete portions of the application development to people who don't need to have any idea about the application as a whole. This is powerful stuff for team development, particularly for a geographically disbursed team.

Model-Glue: Joe Rinehart gave some great presentations on his Model-Glue framework, which has been described by many people (to me anyway) as a kind of hybrid between Fusebox and Mach-II. It uses many of the same principles as Mach-II but could be a bit more approachable if you're coming from a non-OO background. Model-Glue is getting a ton of attention these days, Joe's an extremely sharp guy who works very hard on it, and given the adoption as of late you'll have plenty of help getting into it. The 1.0 version was just released and is definitely worth a look.

Tartan: Paul Kenney's Tartan Framework is a ColdFusion framework designed around Service Oriented Architecture (SOA). The basic idea between SOA is that components of your applications should be extremely loosely coupled (always a good thing!), and to achieve this SOA is based on a service layer to which your application components make requests and from which your components receive responses. If you're thinking "web services" at this point you're on the right track. Tartan can be an extremely powerful addition to other frameworks such as Mach-II, particularly if you want to do something like create a Mach-II application and put a Flash or Flex front-end on it, which Mach-II wouldn't really be able to accommodate on its own.

The onTap Framework: S. Isaac Dealey's onTap Framework has been around for quite some time, and I had the opportunity to hear him present on it several times back when he was a member of the DFW CFUG. My own take on onTap is that it's based on the idea of automatic execution of filepaths, and it's not entirely dissimilar to the way Fusebox approaches things, albeit with less explicit configuration of things. (Isaac, please correct me if I'm totally off-base here!) The most powerful aspect of onTap is the huge API/function libraries Isaac has included in the framework; think Ruby on Rails for ColdFusion. Automatic database tie-ins, automatic form generation and validation, really slick HTML libraries that make building slick DHTML interfaces dead simple ... there's lots of stuff in here to make your life easier.

Other Frameworks, Methodologies, and "Non-Frameworks": As always conferences get extremely busy, so in some cases I found myself caught up in conversations and missing some presentations I initially wanted to attend. Neil Ross presented on his framework TheHUB but unfortunately I missed that session. John Paul Ashenfelter presented on Ruby on Rails, which was admittedly a bit bizarre given that this was a CF conference. I missed the presentation but from what I heard it was full of the superlatives that seem to be part and parcel of the Rails community. Not that I think Rails is a bad idea necessarily, but it certainly isn't the silver bullet they make it out to be, and regardless of anything else it's still Ruby at a language level which I think would be a hard sell in a corporate environment. (Just my opinion.)

Since it's been discussed to death in other blogs I'll leave my comments about the "non-framework" contingency of one that was at the conference to a minimum. Let's just say I had an Emperor's New Clothes moment or two during discussions and presentations of this ilk.

All in all it was a GREAT conference, and definitely shows that the ColdFusion community is at a tipping point. The days of CFers not knowing what OO is and being aware that they need to gain these skills are coming to a close, and with the wealth of world-class tools that are in the works, we're soon going to have a set of enviable tools at our disposal to build powerful, flexible, maintainable ColdFusion applications in ways we never thought possible even as recently as three years ago. It's an exciting time to be a ColdFusion developer!


(Isaac, please correct me if I'm totally off-base here!)

Nope, you're pretty well on-target. That's the angle I've been promoting for a while now.

Although I do also like to think that there's a measure of flexibility in display, data access (persistence) and in the controller that's not generally available with other frameworks -- i.e. in Mach-II or Fusebox, an event-handler or a fuseaction must be explicitly told about any "plugin" applications which might affect the page-view (or functionality) of that request (xml config).

I guess you could say that the onTap framework uses a form of IOC (because it turns that config on its head/side) -- if a plugin affects views or events (as opposed to simply adding a service), it must be at least moderately aware of the events for which controller code is injected, but not vice-versa. The blog for instance deletes a blog when its owner/author is deleted.

No comments: