my (magic unicorns) technology stack

David Burela has asked the community to open our toolbox and reveal our technology stack. Instead of talking about my current stack I'm going to list the tools that I'd like to be using:
  • Framework: ASP.NET MVC (v2 for the moment) - I'm a web guy and request/response just makes sense to me. MVC has the right amount of extensibility hooks to make it easy to configure to work the way I want it to.
  • View Engine: Razor or Spark - One of the things I dislike about MVC is the WebForms view engine. I keep meaning to try out Spark and now that Razor is on the scene I'll give it a go as well. I really like the explanation that "Spark is about markup with code in it and Razor is about code with markup in it". I guess I'll have to try both to see which I prefer.
  • CSS processor: .less - CSS is very powerful but is a pain in the donkey. .less abstracts away some of the chief issues I have with CSS and makes me happy again. Variables, operations, mixins and Nested Rules. My only issue with this tool (and other tools like it) is that it could make it harder to work with a 3rd party design shop.
  • Javascript: jQuery - Easy to learn, comes with MVC and with a huge collection of free plugins making it even better. Why would anyone write web apps without some form of javascript engine I have no idea and jQuery is the best I've found.
  • Object Mapping: AutoMapper - Having separate ViewModels and EditModels for each and every screen could get tiresome and difficult if it weren't for AutoMapper. This is a tool that just works and has been of huge help in building Anti-Corruption layers in my apps.
  • Dependency Injection Container: Unity - This is what I use and what I know. The only feature that I tent to find in other containers that I miss here is AutoRegistration which I have written my own implementation for which makes my life easier. I would like to try different container just to see what I'm missing. I'm a big fan of MEF for high-level, start of the app composition as well but I'm not sure I'd use it for full DI.
  • Data Access & Storage: In the past I've pushed hard for NHibernate with Fluent and Linq making it easier. All of this would normally talk to SQL Server. I'm now intrigued with EF4 Code-First approach, especially with the SQL CE4 database during development/testing. I'd also really like to build an app using RavenDB. I even have two or three in mind.
  • Logging: log4net - gets the job done easily. I keep meaning to write a plugin for Unity to stick the correct ILog implementation in at resolve-time but I haven't got around to it yet.
  • Unit Testing: xUnit - Fixtures are just classes. You don't write tests but Facts (which can be shown to hold or not by the runtime). Setup code goes in the constructor. Have teardown code? Implement IDisposable. This framework makes more sense to me than the others, it's quick and it works.
  • Mocking Framework: moq - Had lambda expression based mocking first and I was hooked from that point on. I look forward to trying NSubstitute when I have some cycles.
  • Test data builder: AutoPoco - I really like the fact that AutoPoco has convention based generator hookup (so that any field containing the word 'Email' gets an email address generator).
  • Other Test Tools: NGourd - I had to put my own tool in here even if it is basically abandoned for the moment. I don't use NGourd in my day-to-day which makes it hard to know where to go with it. Especially considering the existence of more fully fledged BDD tools like StoryQ and SpecFlow. I have issues with both of those tools though so one of these days might see new ngourd commits.
  • Source control: git - I really like the ideas behind distributed version control and I've invested some time in learning Git. I DO currently use this at home for local source control. At work we use TFS and SVN and I have issues with both.
  • Build: Rake + albacore - sadly I haven't been able to give this a go yet but I do find MSBuild to be cumbersome and annoying. XML is like sheet music. It effectively contains the content, it's just not as enjoyable to consume that way. I have also tried Bake from the Boo community (which is kind of awesome).
  • Continuous Integration: Hudson - Free CI tool that works very well for me. Very easy to get up and running (possibly even as easy as teamcity) and with a wealth of plugins to get you where you need to be.
  • Project Management: Retrospectiva - I really like this tool but I've never had a chance to use it on a real project. Built in wiki and blog with special wiki syntax for linking to tickets and checkins. It's a ruby on rails app.
  • In case I'm not writing a web app: Caliburn.Micro - I'm a total Caliburn n00b but so far I really like the feel of this framework. It is literally about building a fully testable solution and then skinning it look like you want it to. Good fun.
Dang but that list gets long. I'm sure I'm missing things but obviously they aren't that important or I'd have included them. I look forward to reading everyone else's responses to David's post and I encourage others to take part in the Developer Blog Banter idea.
Posted by: Mike Minutillo
Last revised: 27 May, 2011 02:42 PM History


12 May, 2011 07:52 AM @ version 0

Thanks Michael, how about elmah in terms logging? you did talk about it in the MVC session last week.

11 Nov, 2010 11:14 AM @ version 0

I haven't heard of AutoPoco either and will check it out. I too have used NBuilder and really like it. If you're interested at all I've built a test data generator using NBuilder and an embedded scripting platform. This allows you to point to an assembly, create test data returned as JSON, all without having to fire up Visual Studio.

If you are interested here is post on the utility:

03 Sep, 2010 05:11 AM @ version 0

G'Day mate.

- StructureMap instead of Unity.
- NBuilder for in memory test objects. (Using DI, we use the InMemory Repository for initial day-to-day dev for each work item. When we need to manually intergrate test our work items (before we check em in), we swap over the sql server repository. Gotta keep our dev fast :)
- CuttingEdge.Conditions for simple, lightweight pre/post data validation in methods, etc. (not to get confused with ui data validation/annotations, etc).
- NLog for logging. I used to use L4N but that shit is so nasty :( NLog is so much easier to use AND has a nice windows app to view the data live (stream). Also can do Growl (which i love). and (log viewer)



03 Aug, 2010 02:54 AM @ version 0

@Liam - The draw for me for Cucumber (and the gherkin syntax) is that I can present the tests to the business person and they can say whether they match their intent or not. If you have a reasonably tech-savvy user they can even author requirements in this way (apparently the BA on my previous project has started doing this in SpecFlow).

That split between the portion of the spec that belongs to the business and the portion that belongs to the development team is (I feel) pretty important. Once you develop a suite of Steps you essentially have a DSL for testing your app and a domain expert should be able to tweak/make changes to those specs without recompiling the app or the tests (this is what I have against SpecFlow incidentally).

03 Aug, 2010 02:48 AM @ version 0

@David - The choice for AutoPoco was mainly around the conventions stuff. When I first started to use NBuilder I found myself really missing conventions. I had to manually hook everything up which was a real pain as I was working with AutoMapper and an AutoRegistration facility for Unity. Everything was done via convention so why not this?

02 Aug, 2010 04:31 AM @ version 0

I haven't heard of AutoPOCO before either... Thanks for that! I like it!


01 Aug, 2010 11:02 PM @ version 0

Nice work. Thanks for the link to AutoPoco - it looks interesting.

What issues do you have with StoryQ?

31 Jul, 2010 12:42 PM @ version 0

Thanks Michael for participating in the first Developer Blog Banter. I liked the title of your blog post referencing Scott Hanselman's EF4 post :-)

I haven't heard of AutoPOCO before. Any reason for chosing that tool over nBuilder? Is it the convention based generator hookup that draws you to it?

No new comments are allowed on this post.