More on Frameworks
I've been following CFDJ's coverage of the many ColdFusion frameworks out there, with a huge amount of interest. I'm always looking for anything that can give me the edge as far as writing web apps. The only problem is that every time I start a new project with one of the frameworks, I seem to always write my own. Why is that?
One of the reasons that there are so many different frameworks, and framework support plugins is because there are so many different ways to write software and solve business problems. I don't think that it is possible to write a framework, no matter how flexible, that will be suitable for use in every case. Many of the people who design the big frameworks say that for the deteriation in performance, or ease of use, there are large gains in developer productivity, code reuse and encapsulation, etc… I think that these things are great, and I wouldn't develop an application anymore without at least thinking about patterns, and domain modeling. So why then do I have problems with always using a framework like Fusebox or Mach-II?
Mach-II lends itself very well to large projects, or huge collaborative teams working to solve business problems. It has good support for OO and design patterns. The problem is that most business applications developed in CF are not huge sprawling web projects. That is not to say that there are none, it is just that most of them aren't that, so to use a framework that was designed for that all the time wouldn't make sense.
I've designed my own framework and I have pretty large projects that run on it. It's still really green and young, and as I work on the project, I am frequently working on the framework. Does that mean that I won't evaluate Mach-II, fusebox, etc… for my next big project, no. I will re-evaluate all the frameworks when the time comes to start something new, and if one exists that suits my needs then I will use it, otherwise I'll write another one. This blog site for example uses no framework. It didn't make sense to write it in one. It is too simple. Every framework that I tried made the blog slower in some way. I don't intend to redistribute the code, and I am able to make updates at will.
I think that any developer who blindly uses one framework all the time for every project without thinking about what the framework is suited to should review their software design skills. For many a framework is a great jumping off point, but if you find yourself having to compromise your vision for the software to fit into the framework, then you should probably use another one, or write your own.
Of the many frameworks, the most flexible seems to be Mach-II. If I had to chose one to work on for the rest of my coding life that would be the one. But it is difficult for newbies to grasp the custom typing that it uses as well as whether or not to use beans, and what beans are. The problem is that the people in dialog about Mach-II are so far into the world of OO, I'm not sure they could describe Mach-II without going into all of the wonderful OO design patterns that Mach-II employs and makes possible in ColdFusion. I also don't think that they should try to make Mach-II accessible to people who don't understand, at least at a rudimentary level, OO. Those people should look at Fusebox 3. That is a great entry level framework if you are trying to understand model-view-controller and are just starting out.