Following is a list of features that I wish were available to me as a .NET developer.
.NET’s built-in caching capabilities, especially for ASP.NET developers, was a major new enhancement for web developers. When properly leveraged, both the output caching and programmatic caching API can lead to awesome performance. Unfortunately, as a system grows and performance really starts to matter, the built-in caching quickly falls apart – it doesn’t scale whatsoever. .NET caching needs to be more pluggable and ship with a distributed caching system. I work with numerous load balanced solution and only rarely use the built-in caching mechanism because your caches will quickly fall out of synch.
For the curious, I’ve read that Facebook is using 200 memcached servers.
Less language features, more IDE features
I don’t know what the story for Orcas is, but the tug-of-war between the IDE and the language teams has really sucked. Many things that should be IDE features are currently language features. Regardless of how you feel about background compilation, refactoring or edit-and-continue (I’m probably missing a couple), these things should be baked into the IDE with the language able to hook into it. Supposedly it’s something being worked out so hopefully the story will get better soon.
Rethink the ASP.NET page model/life cycle
Thinking beyond the common request to implement an MVC pattern, I’d be great if the ASP.NET team could rethink the current model and life cycle. It leaks badly in any complicated scenario. 6 years after its release, I still don’t fully understand it, and I’m ready to bet that I’m in the overwhelming majority. The only time it doesn’t leak is when you don’t need any of the fancy stuff it tries to do. I’m almost at the point where I just don’t use .NET if I’m building a heavy web-based application. Forget learning an O/R mapper, test driven development or understanding domain driven development, the single best thing any ASP.NET developer can learn right now is MonoRail.
Silverlight Physics and Network API
I might be biased about this, but silverlight without a built-in physics engine and networking stack makes it useless in a lot of cases. It’s a young product with a lot of growth potential, but it looks like the early versions will ship with some key features missing (I’m not just talking about the alphas…but the final 1.1 release).
Safe Thread-Local Storage
I know there’s a lot of confusion about this, but I want an ASP.NET-agnostic method for storing data for a request. It isn’t the end of the world, but code like the following, even if it’s hidden away, bugs me:
SomeContext context = (HttpContext.Current == null) ? (SomeContext) Thread.GetData(Thread.GetNamedDataSlot(_dataSlotName)) :
Probably the reason I want this is because too many people (including myself) got burnt badly bythis.
Better handling of DBNull
It was hoped that nullable types were gonna make it easier to work with DBNull, but, to the best of my knowledge, that never worked out. There should just be something like the CSLA.NET’s SafeDataHandler built into ADO.NET.
Better IDE Help
I find the built-in help horrible. Opening up firefox and googling something is _always_ faster and more accurate than hitting F1. It boggles the mind. In fairness, I’ve used a number of IDEs and in each case the help section is always the worst – VS.NET’s is a lot better than most.
.NET on Linux As a first class citizen
Nothing more to say about this. .NET on Amazon’s EC2 would rock.