InfoQ

News

Catching up with the Castle Project

Posted by Robert Bazinet on Sep 13, 2007

Community
.NET
Topics
Web Frameworks
Tags
Castle ,
nHibernate ,
MVC ,
Frameworks

Catching up with the Castle Project

The Castle Project is an open source project that runs on .NET, providing an MVC (Model-View-Controller) framework similar to the popular Ruby on Rails. The Castle Project has been in development since 2003 and released Version 1.0 RC2, in November of 2006.  As the project nears its V1.0 RC3 we caught up with Hamilton Verissimo, the founder of the project, to talk about what the Castle Project is and where it's headed.

The Castle Project should be of interest to any .NET developer interested in new ways to create web applications on the platform or are particularly curious about implementing MVC-based applications. It is an attempt to provide tools and frameworks that make development on .NET world more enjoyable, fun and productive. It provides the means to create applications with more isolation amongst layers, promoting a good design.

We had to ask, what exactly the Castle Project is:

MicroKernel/Windsor - which are Inversion of Control containers. In fact, Windsor just aggregates the MicroKernel and provides external configuration and proxy support. The core idea of Inversion of Control containers (IoC for short) is to promote a loosely coupled design by removing the need to have your code creating and configuring services it depends upon.

Castle ActiveRecord - an ORM built on top of NHibernate . It removes the need to create XML mappings and abstracts some complexity out of NHibernate's infrastructure. Although the standard use relies on using base classes, this is not required, you can use ActiveRecord with different patterns like Repository.

Castle MonoRail - a web framework built on top of ASP.NET (do not confuse ASP.NET with WebForms). It puts controllers as the main player in a web application, deciding the flow, delegating to other layers and choosing views to render, hence it only cares about application flow logic. The views on the other hand, are only concerned with presentation logic. This greatly differs from the standard WebForms paradigm. It's the standard choice for people that came from web framework on other platforms as it allows you to have full control over the HTML generated, which is not true for WebForms and its controls.

There are non top-level projects but equally important like DynamicProxy (it's allows proxying interface and classes and it's used by several open source projects like NHibernate and Rhino.Mocks). NVelocity is also our fork of the defunct NVelocity on Sourceforge. We fixed several bugs, added some interesting features and optimized it.

With regards to the technology provided by the project for rendering views:

Castle MonoRail offers different view engines to produce what is ultimately rendered to the browser. NVelocity and Brail comes with the Castle package, albeit there are other implementations of view engines from the community namely AspView and one based on the StringTemplate project.

The difference comes down to the fact that with these view engines we don't have a complex page lifecycle like WebForms. We don't try to reinvent the web paradigm to a stateful one which it clearly isn't. By sticking with the web as it is, we gain simplicity. By leaving Models and Controllers handle the data/state and flow/application logic, we leave to the views the role of simply displaying content, and for that we don't need anything more complex than ifs and foreachs. Content can be reused, though, by splitting views into different files or creating ViewComponents which can be seen as a view with some associated logic.

On the changes since RC2 was released:

ActiveRecord and Windsor had some improvements and bug fixes. MonoRail was improved greatly with the addition of cache support and JS generation. Cache can be configured on the controller level, and ultimately uses the ASP.NET caching infrastructure. JS generation is a way to generate a JavaScript code that changes the page. Usually it's used through AJAX, so imagine you have a page displaying some content and the user clicks a button that change the state of several things. The action can use JS Generation to render JavaScript updating the elements on the page.

This project has some obvious similarities to Ruby on Rails, when asked if Castle Project started because of the popularity of Ruby on Rails:

Castle started as home for the Inversion of Control container I had in my mind for like an year, between 2003 and 2004. Castle ActiveRecord and MonoRail came after my contact with Rails which was very young at the time (2004). I decided to build a product using it and had nothing but headaches with all non-standard requirements. .NET on the other hand, had it's great and documented library, with decent projects popping up everywhere. Although I loved Rails, it's just not the framework and platform I'd use for the kind of projects I'm usually involved with.

While MonoRail started as port of Ruby on Rails ActionPack, it diverged with all the contributions and ideas from users came with. Today it has its own identity, and while the foundation is similar we support things that RoR doesn't and vice-versa.

When asked about the future of the Castle Project and where Hamilton sees it headed:

Covering all the aspects of enterprise projects is the ultimate goal. And we balance that with offering products that are predictable, pleasant to work with and that give you a productivity boost. It's different that offering something complex and then an editor or code generation tool, which otherwise you wouldn't be able to work with. That's why our work differs so much from Microsoft's approach.

The Castle Project is an open source project and welcomes developers to get involved. Getting involved includes submitting patches that fix bugs, or add new features, add test cases or documentation. The first step to get involved is subscribing to the development list and start to participate on the discussions.

More information can be found at the Castle Project web site or at the wiki. Hamilton also maintains a very informative blog.

No comments

Watch Thread Reply

Educational Content

Brian Marick on 4 Challenges and 5 Guiding Values of Agile Software Development

Brian Marick takes us through a quick tour of the most important values and challenges to adopting Agile successfully (they aren't the typical challenges and values we hear in the community).

Are You a Software Architect?

The line between development and architecture is tricky. Does it exist at all? Is an ivory tower actually needed? There's a balance in the middle, but how do you move from developer to architect?

Agile – A Way of Life and Pragmatic Use of Authority

The word 'authority' sometimes produces an allergic response in hard-line agilists. Freedom and authority – both are bad if misused and both are good if used in right spirit for a noble cause.

Getting Started with Grails, Second Edition

"Getting Started with Grails" brings you up to speed on this modern web framework. Companies as varied as LinkedIn, Wired, and Taco Bell are all using Grails. Are you ready to get started as well?

Using ITIL V3 as a Foundation for SOA Governance

Those familiar with only ITIL V2 often scoff at the thought that ITIL could serve as a governance framework for SOA. With ITIL V3, the focus of the framework shifted towards service-orientation.

Adrian Colyer on AspectJ, tc Server and dm Server

SpringSource CTO Adrian Colyer discusses AspectJ, SpringSource's dm Server and tc Server products, OSGi and Scrum.

Adam Wiggins on Heroku

Heroku's Adam Wiggins talks about Rails, Background Jobs, Add-Ons, Ruby, and how Heroku manages to work around Ruby's inefficiencies using Erlang and other languages.

SOA as an Architectural Pattern: Best Practices in Software Architecture

For Grady Booch the foundation of a good architecture is patterns, SOA being just one of many patterns. In this Second Life presentation, Booch attempts to bring more clarity on what architecture is.