Monday, June 04, 2007

some observations

I've spent the past few weeks getting acquainted with ASP.Net 2.0 and Visual Basic 2005, via Visual Studio .Net 2005. In the course of this some of my previously held beliefs have been relinquished and others upheld. Let's start with the good.

MS Development Tools rock!

Holy crap this is awesome! So much stuff is just done for you, and the Intellisense is simply amazing. The entire .Net framework is Intellisense enabled, and it picks up all your custom classes too. And it can dynamically refactor, so if you change MyVariable to MyNewVariable, it updates it for you across your project. And the IDE just feels comfortable. I can find things relatively easily, unlike my experience in Eclipse where I was constantly searching for stuff.

ASP.Net 2.0 is very slick

I've only done a few basic things with ASP.Net but already I've accomplished more than I ever did with a Domino web app. I drag and drop like I would in a normal IDE. I double-click to generate event handlers. I don't have to go searching for various places to stuff code or know about arcane $$ syntaxed elements.

And now for the bad...

Cross platform?

Let's just be clear up front: you aren't going to easily create cross-platform applications using Visual Studio. That may be changing as Microsoft rolls out IronRuby and other dynamic language extensions, but it's not here yet. For now the fact remains that Microsoft steers you very strongly toward an all Microsoft solution.

Stepping outside the box is hard

Either you take what you've given or you pretty much have to rewrite it all from scratch. Case in point: when you use the nifty FormView component, which feeds SQL data into an HTML form, it includes a set of default templates for reading, updating, and adding records. If you don't like the way the default template looks it is extremely difficult to change it. You're better off recreating it from scratch.

The data access components that are provided via UI widgets are moderately functional but you will quickly run into limitations. It is better to code your own data access from the ground up. This, coupled with the previous limitation, means you'll be writing a lot more code than you may have anticipated. At least you'll be doing it in a very nice IDE.

Lessons learned (so far)

Trying to create an enterprise application that is entirely web-based just plain sucks. The stateless environment of the Internet is not well-suited to transactional data entry. Of course it can be done, but it's several orders of magnitude more everything than a rich client application: more code, more testing, and more server resources. After all that it's less functional than the comparable rich client solution.

For all the good stuff in Visual Studio, there are still some ugly bits and tremendous gotchas. If you rely on the IDE to do everything for you, you're going to end up with some marginal applications. This is one area where I think Domino Designer's lack of user friendliness is actually a good thing. You have to know what you're doing or you aren't even going to come close to a working solution. With VS.Net you can fake most of it by clicking and dragging. That's not to say I wouldn't like to see Domino Designer radically modernized, but there is something to be said for the "you know it or don't" way it is now.

So... which one is better? That's just too close to call for now. I'm not a fan of web-based enterprise applications, but I do think if I were headed down that path the ASP.Net route would win.


  1. Charles, please keep up this thread. As a Notes Developer who came straight from the mainframe world, I don't have any .Net or MS experience and always wondered how they compared.

  2. I've also had a few thought about the MS environment, first it looks neat and comfortable, but then you get hit by the platform wall.

    No support for Linux, Mac, or other systems. That kinda burns up all what Microsoft has done or ever will do.

    If Microsoft would go multiplatform, like IBM and Lotus, they would be a real threat to Notes/Domino and BlitzMax3D.