July 2011 - My Application Tool Belt for .NET Web Applications

I really like to talk about tools I use to the people I work with. I especially like to push tools into environments where I think could be an improvement to their work flow.  So here it is, my current tool belt. I primarily focus on web applications, so there’s a bias toward those tools.

Web

Asp.NET MVC 3 Razor

This one should be obvious by now, but I’m completely in love with Asp.NET MVC 3 Razor. Web forms to me now is a huge turn off, and after using MVC for so long, Web forms seems counter-productive. That’s not to say I push MVC everywhere I go; there are some applications that are, in their current form, working great and in no need of replacement. Nonetheless, if you really want to feel like a web developer again, checkout MVC.

jQuery

This very cool framework brings to me the power to manipulate the DOM with ease as if it were functional CSS. With built-in helper functions for AJAX & JSON handling, it’s a no brainer when I want to do some real quick javascript work on a website.  Coupled with KnockoutJS, this can be a very powerful set of Web 2.0 tools

jQuery Tmpl & KnockoutJS

Templating client-side is a breeze with these two tools. If you want to learn how to render content client-side, definitely give these a try first. knockout even has a real-time tutorial website where you can learn to use it. Great stuff!

FireBug/Chrome

FireBug plugin for Firefox is ultimately my favorite web debug tool for both CSS and javascript. It’s clean, easy to read, and very nicely shows net traffic for ajax calls. I’m not saying the Chrome tools are bad, they’re very pretty and useful. I use Chrome almost full time now for browsing. But definitely while designing/debugging, firefox is my favorite.

 

Databases

At work

Sql Server (pick an edition) 2008 R2. In the enterprise, this system is awesome in combo with .NET applications. All .NET ORM tools across the board work with it, and it’s very easy to use.  Using the latest Sql Management Studio w/ any other version of sql server is also a breeze.

At home

I’m really digging MongoDB. It’s a complete departure of what I’m used to growing up in the Microsoft world. At the same time it’s redundant, very, very fast, and cuts a ton of work out of my data management in projects since you’re storing documents. Serialize your aggregate root, done!  Very cool.

 

.NET Data Access

Pick your flavor, but the two I have most experience recently are: SubSonic & Fluent Nhibernate.  I really dig the new EF 4.1 Code First. But my favorites tend to be the ones that are the simplest to setup and use. (I suppose EF 4.1 could fit that category; Nhib, not so much). Recently with my MongoDB work at home, these layers all went by the wayside. Using a repository, it’s very easy to layer in an abstract CRUD base and let your repository become more business oriented as it should. All these layers work pretty well with that.

 

BDD,Testing

Machine.Specifications

This is the coolest thing ever. I know there are a ton of testing frameworks out there, but this one really makes things simple. I even like the primitive report they generate, which is great for listing out specifications for a project. Together with MvcContrib & Rhino Mocks, it’s a very powerful testing framework.

MvcContrib

This contains a great set of testing helpers to assist in your test driven development. It has cool methods like AssertViewRendered().ForView(“nameyourview”).ViewData.Model.Shouldxxx  You can use it to assert end-to-end the behavior of your MVC Application. It also contains a nice HTTP Context builder for testing against fake HttpContext.

Rhino.Mocks

This is a great mocking framework. It’s very easy to use. This is one of those “pick your flavor” type things. There’s a TON of mocking frameworks out there or you could just roll your own.

TestDriven.Net

This is a very cool (free for FOSS individual projects) test runner tool for Visual Studio. You can debug, and run with any configured testing framework like Nunit, Xunit, Mspec, etc. This can save you a lot of time; and is a great alternative if you don’t have Resharper. (I’m not a Re# user yet, but we’ve been pushing it at work quite a bit lately; need to give it a spin).

 

Source Control

git

Man, I love git. This is a very, very powerful SCM, and it’s free. Written by Linus himself, this tool is fast, efficient and very flexible for small or large development teams. It’s very branch/merge friendly and you can setup multiple remote storage areas for your repositories. Coming from a SourceSafe/TFS/Subversion background, this a completely new way of thinking about code management. I highly recommend checking out TekPub’s Mastering Git series and the huge handful of git websites out there dedicated to teaching its use. I push this where I can; especially if a shop is still on SourceSafe.  Yeah it’s command line only; but lemme tell ya, when you really learn how to use and understand it, you’ll never look back. My only shameless preach is that you need to start building code using feature-based branching. Branch, branch, branch. Don’t be afraid of it.

MsysGit is a great Windows port

gitosis

Linux based, git repository management. This tool is very easy to use for managing git repositories on a server. It easily sets up SSH based repositories that are accessible from the home directory and provides a nice way of managing repositories and user access via public keys. Gitosis for Ubuntu has some pretty good docs.

viewgit

This very tiny php website does a pretty good job of simply enumerating and making available git version history, branches, tags, and blobs over a web interface. (I’m currently looking at CGit and others as an alternative; this just happened to be the first one I tried out).

github.com

The best SCM website ever. ;) They have a great git log diagram (network). They provide a wiki, bug tracker, release tracking, etc for all projects. Mono has moved their source over to it along with a handful of other large projects. The paid accounts give you access to store your code securely in the cloud while the free accounts let you share and invite community members to contribute to your projects very easily.

 

Enjoy!