Tuesday, September 26, 2006

Radiant Development

After contributions and collaboration with a new open-source community I have recently become part of the core developer team for the Ruby on Rails content management system called Radiant. Radiant powers, for instance, the official Ruby website. With the development of a search plugin I had a chance to identify strengths and weaknesses of the current Radiant software plugin system. Within Radiant, plug-ins are a collection of several modules that need to work together in order to hook into the application.

Generally (well-desinged) standalone web applications follow the Model-View-Controller paradigm. The current Radiant Plugin System however does not compartmentalize a single plugin into independent or semi-independent pieces. Instead, for example, the HTML render logic and other data or control constructs form one class that is currently referred to as "behaviors." Shortcoming of this design include: missing access to the web frameworkÂ’s HTML render methods, code duplication, and a highly tangled knot of message delegations.

In order to address this issue I have been working with John W Long and other developers on planning the design of a new architecture that allows us to extend and improve the existing plugin system. I have spent some time coming up with an implementation of a proof-of-concept. However the new code clearly suggests that we would need to introduce major changes to the core software if we would decide to peruse this direction. However the new architecture features a much improved inheritance model that eliminates a majority of the delegations between objects. I have pushed for this class design because I have had good experience with it when I was developing Hieraki (documentation publishing software). It simplifies matters a lot. The goal always is simplicity over complexity.


John expressed concerns though that the new design might actually be more what we need. We both also sense that the underlying problem is due to the traditional MVC layout. By that I mean MVC is at most ambiguous for a content management system because dynamic page creation is such an integral part of the software. Further investigation is required before I will be able to put my finger on "what is wrong" with MVC and Radiant. But I am confident we will be able to find a solution that fits our needs and addresses the shortcoming of the current system.