Useful links. What I'm really missing on the Wafer list is Rod Johnson's
Spring framework, which grew out of the design
philosophy and framework classes described in his
J2EE Design and Development book -- a truly exceptional book, by the way, which comes highly recommended indeed.
Spring is a framework from someone who knows how to write frameworks, and that is a rare breed indeed. It is lightweight, generally well thought out, does not intrude on your classes and it's pluggable at every corner. Integrating third party code with it is usually a doddle. It supports complexity but keeps simple things simple -- cool new features are judged by their cost/benefit ratio before inclusion.
In short, it is a lot of things that Struts is not. I have used Struts extensively, and have written chapters about it. It is definitely a useful framework; as an early MVC implementation it was solid, and over time it has gained a lot of features and momentum. Its design, however, is mediocre. It is heavyweight, intrusive, class-based rather than interface-based and not nearly flexible enough. New features do not seem to be critically tested for their cost/benefit ratio, and many of them represent missed opportunities. Consider, for instance, the convoluted and inflexible way the Validator tries to implement non-trivial validation rules that involve dependencies between fields: what is wrong with the gazillion expression languages out there (including
JSP EL)? Hopefully, the Struts 2 redesign will incorporate all these lessons from the past, but neither the work on Struts 1.1 nor the roadmap for 2 encourage high expectations in this regard.
I should add that Spring and Struts cannot be compared directly. Spring is an application framework, not just a web application framework. It covers all layers of the application -- including such things as Inversion of Control configuration, EJB support, a
JDBC library, Hibernate integration, declarative transaction support and AOP -- and is not just an MVC implementation. At the same time, it does not try to do implement as much view functionality as Struts does, relying instead on its easy integration with other tools such as the JSTL or Tapestry or indeed with any custom code that you might want to write. Its breadth and flexibility can make it hard to pin down; rather than imposing a single monolithic straitjacket structure on you, it adapts to your needs and supports all code that you write. It does not force you to buy into all of the framework, but encourages you to use the bits that you need.
Check
Spring out. It's in its pre-1.0 milestone release, but most of the codebase is stable, having been in production use for quite some time. Documentation is available but needs some work to cover the most recent features.
- Peter
[ October 11, 2003: Message edited by: Peter den Haan ]