Jul 30 2010
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.
- 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.
No new comments are allowed on this post.