How to build a framework?
There is something that I would like to know: How do you go about building a framework like Spring or Ruby on Rails? How is it that these things get created? Did someone just sit down one day and decide that the world needed something called Spring and design an IOC container? Or are these things that have evolved from simple applications into something much bigger?
According to David Heinemeier Hansson “good frameworks are extracted, not invented. . . a successful web-application framework emerge[s] from a equally successful real-world application.” But is this always the case? How was it that Spring came about?
The J2EE specification, as far as I understand it, is a framework that Sun designed on its own without the help of any former applications. The inefficiencies present in the original J2EE Petstore blueprint are a testiment to how unsuccessful this framework has been. I also think that the existance of Spring is another proof of how wrong Sun got this initial design. However, with EJB3, Sun now has the ability to base the new design on several very successfull applications—Hibernate, TopLink, and JDO—and people are excited about what EJB3 will be like. To me, this proves David claim, but then I don’t have the experience necessary to accurately judge these things.
I think because at work people are trying to figure out how to build and design a framework, I find myself contemplating how things like Hibernate, Tapestry, Struts and Spring were created along with how one goes about creating a framework in the first place. However, I do find a certain amount of logic in David’s statement.