Sunday 1 August 2010

My Technology Stack

A bunch of people have been posting answers to David Burela’s ‘What is your preferred technology stack?’ question and I thought I’d join in. At work we’re just finishing up on a smallish project that uses this stack:

  • ASP.NET MVC 2.0
    If you’re developing web applications on Microsoft’s stack, the Web Forms vs MVC decision will have the most significant effect on your day to day development experience. I find Web Forms to be a harmful, leaky abstraction and cannot get enough of MVC’s simplicity, especially when it comes to AJAX development.
  • MVC Contrib
    Fills in some of ASP.NET MVC’s gaps.
  • jQuery
    Just don’t do JavaScript without it.
  • jQuery.UI, jQuery.Validate, jQuery.Form, jqGrid
    I use a few other jQuery plugins but these are the most useful ones.
  • NHibernate + Fluent NHibernate + NHibernate.Validator
    This should hardly come as a surprise, given that I’m a member of the Fluent NHibernate team. We’re using a trunk build of NHibernate 3.0 which includes the work on the new LINQ provider. In terms of Fluent NHibernate usage, we go the automapping route as our domain models are pretty straightforward. We sacrifice domain “purity” and use NHibernate.Validator’s attributes because they are just so damn convenient. I’d be quite comfortable with making a move to the fluent interface though.
  • Castle Windsor
    When it comes to IoC containers, I don’t have particularly strong feelings. I’ve used Structure Map a bit and I prefer it to Windsor but its easy to go with Windsor because Sharp Architecture includes it. My next home project that needs a container will use AutoFac as I’ve been meaning to try it.
  • Sharp Architecture
    Glue for ASP.NET MVC, Fluent NHibernate, Castle.Windsor and other projects. Sharp Architecture gives you a bunch of handy stuff and from a rapid development perspective its quite nice to drop in. But I’m not entirely comfortable with some of the assumptions it makes. For larger projects, I’ll reuse a bunch of the code from Sharp Architecture, rather than referencing it as a binary.
  • xVal
    Acts as a bridge between NHibernate.Validator and jQuery.Validate. This way we stick [NotEmpty] style attributes on our domain model and we get client side validation for free. I’m aware that ASP.NET MVC 2.0 includes some xVal style functionality but I wasn’t able to figure out if there was a better option so I just stuck with xVal since it worked so nice on my last MVC (1.0) project.
  • Elmah
    Drop it into your solution in 10 minutes and then forget about exception logging.
  • NUnit
    I’d like to try some other unit testing frameworks but its hard to find the time. NUnit works well enough for now.
  • Microsoft Team Foundation Server
    Ugh. We use it for source control, builds, and work tracking – and its my fault! (a mistake from many years ago, sigh). I wish we were using git.

The only problem with a stack like this is that when you decide to use a newer NHibernate build, you’ve got a whole bunch of projects to recompile. I’m still waiting for some clever folks to sort this problem out :)