16 June 2005
Developer productivity, or said another way, budget, is usually of paramount concern in the majority of business application projects. There are several application frameworks addressing this ubiquitous need for an increase in productivity in innovative ways. These frameworks, moreover, have been gaining considerable momentum and popularity. Ruby on Rails, Spring Framework (as well as Castle), and Zope are a few such projects that I am very excited about.
To start us out, Ruby on Rails, an open-source web application framework, unifies web development with a single language and particular assumptions about application architecture as well as coordination with an underlying model en leu of a proprietary architecture and verbose configuration files. As a result, Ruby on Rails drastically reduces coding time to create applications that process and move data around. Okay, at a this level, sounds like a magic bullet. Curt Hibbs has written a great introduction to Ruby on Rails that depicts just exactly how Ruby on Rails jives. Basically, by using certain naming conventions from relational model to object model (although this can be circumvented at the expense of a little more time), Ruby on Rails is able to automate persistence, object relationships, basic request processing, presentation, and validation. Lastly, Ruby is an interpreted, cross-platform language and the Ruby on Rails framework provides database drivers for the popular RDBMSs. Thus, Ruby on Rails provides an extremely productive programming environment that alleviates the developer from the minutia while staying decoupled from any particular platform.
Next, the Spring Framework and Castle project provide light-weight, container-based frameworks that rely on Inversion of Control (IoC) for Java and .NET, respectively. These two frameworks are very similar in their application of dependency injection and Aspect Oriented Programming (AOP). These concepts facilitate the testability and API neutrality of our code as well as allow us to flip switches for security, transactions, and the like. Furthermore, they are alike in that they both offer basic Model-View-Controller (MVC) get-ups that enable us to plug in different view components like Velocity and NVelocity. Spring and Castle both even allow the usage of different persistence engines, for example, Hibernate and NHibernate. Where these two outfits differ, however, is in their assumptions about domain model. This is where I believe that Castle shines. Whereas Spring relies on lengthy XML configuration files to direct Hibernate, Castle's NHibernate provider is able to reflect upon the object model and automatically generate persistence configuration. This is a huge time saver. While tinkering with Castle, I sicked the ActiveRecord Generator on a database of approximately 200 tables and in a matter of minutes, I had a comprehensive, persistent object model. The code-reduction was quite impressive. All in all, these frameworks are very comparable, Castle leaning more towards a Ruby on Rails paradigm of assumptions. Of course, Spring and Castle are rooted in static languages; consequently, these frameworks are not quite as flexible and dynamic as Ruby on Rails. Yet, they have gotten quite close with reflection, AOP, and transparent proxy classes.
Last, we have Zope, a full-fledged application server written in Python. Unlike the previous frameworks, Zope relies heavily on an internal object database, or ODBMS. Several years ago, object databases were predicted to make a big splash; however, many would say that they never fulfilled this expectation. Well, Zope begs to differ. Python, like Ruby, is an interpreted, object-oriented language. This allows applications written towards the Zope framework to benefit from all the productivity gains of these pragmatic, dynamic approaches wherein the Linux Apache MySQL PHP/Perl/Python (LAMP) camp is very popular as well. Another effort that contributes to Zope's promise is ERP5, an open-source enterprise framework built on top of Zope. The "5" in ERP5 stems from the ERP5 Universal Business Model which, at an abstract level describes business entities as Paths, Nodes, Movements, Items, and Resources. What has me so excited about the combination of these projects is ERP5's design and usage of Zope's foundation. Dr. Jean-Paul Smets, CEO of Nexedi, wrote a great introduction on ERP5 and the interplay with Zope where he describes how they mitigated typical performance problems in the object-database world by indexing objects in a traditional relational database. The Zope application framework combines the pragmatic approach of Python with the elegance of an object database, and when used in concert with a relational database as an indexing facility, is extremely powerful. Performance of relational databases with no impedance mismatch. Now, that is pretty cool.
To sum it up, Ruby on Rails, Spring, Castle, and Zope are all exploring new avenues for application development. Each with their unique approach to increasing developer productivity, I believe these frameworks are cultivating the foundation for the next generation of web applications. I would like to thank all that have contributed to these projects; I look forward to seeing how each project affects the way that we develop web applications.