colinramsay.co.uk

Technology Brainstorm

09 Oct 2007

Recently Plastiscenic has been asked to quote for a fairly large project, and if it comes off I'll have the chance to work on it from the ground up, using whatever technologies I think are best suited.

Monorail is an absolute no brainer for me. The last ASP.NET Webforms project I worked on was a nightmare and I've no real desire to repeat the experience. More importantly, the nature of the project is such that I want to make sure I keep good separation of logic, and MR definitely lends itself to that.

So that's the easy part. Next up is the database; normally I'd jump straight in with Castle's ActiveRecord implementation but I've recently been working with straight NHibernate and I can clearly see why people like it. Compared to AR it's cleaner - less cruft in your entities and again, it's easier to separate your concerns because you don't have AR-specific attributes decorating your objects.

However, the sheer mobility of working with ActiveRecord makes it appealing. I'm more familiar with the attribute-based configuration and it's also got great integration with MR. And then when you factor in the Castle validation support, which stretches across AR, into MR, then down to the client side, it's almost looking like a no-brainer.

Finally, I have to tie it all together. This project is going to benefit from having strongly independent and tightly tested Services (yes, capital "s"), and I'm considering whether I want to use Windsor to pull these in. The advantage of working with Windsor from the ground up is that I can use it in my unit tests as well, and in association with my growing knowledge of Rhino Mocks I can see that being a very powerful advantage.

I'm open to suggestions - at the moment the power that the Castle stack offers is looking to be hard to beat (maybe I'm biased these days!), but I'd love to hear how other people approach a brand new project and evaluation of the available technologies.

Feedback or questions on this post? Create an issue on GitHub.