Thursday, August 05, 2004


This is my first entry into the blogosphere.

I am an independent software consultant. I work primarily on machine control, UI and algorithms. Although I have an extensive background in embedded systems, I currently am working primarily on the windows platform. Currently all my contracts include .Net and legacy components using com-interop to communicate.

I'm interested in providing an independent voice. I often want to voice a dissenting opinion that I do not hear from Redmon.

I'm often struck how proscriptive advice from Microsoft "experts" is used by people to justify their decisions without understanding the reason for the advice. For example, I worked on a project where the technical lead asserted we could not use MFC in our ATL based COM component because Microsoft said we shoudn't. What he failed to understand was that the experts in ATL were talking about active-x controls that would be downloaded from the internet. The motivation was to keep these COM components small so that download times would be small. In his case all the components were delivered to the customer on a CD. Size was not an issue. Nonetheless a group of people spent a long time re-writing existing code to remove the MFC dependencies.

When .Net came out we were advised to use remoting instead of COM. I love COM. It has provided a living for me by being hard enough to use to require companies to bring in experts to help them. There are a few things I don't like about remoting but in general it has been a great advance over COM. The systems I work on usually involve multiple components developed independently and COM or remoting provide the glue for all the objects to communicate. These system have all the components either on the same machine or within the same small intra-net. This object-oriented communications mechanism is a great architectural fit.

But now the experts such as Don Box are at it again. With the push towards Indigo the experts are telling us you shoud use Service Oriented Architecture. The push is to use a stateless model. Web services and their equivalent under Indigo do not mainatin object state. The object may be recreated on each call. This model is pretty useless if you are trying to communicate with an object that needs to maintain state. Now we can have an intialization method that returns a "cookie" to identify the object on the server and then pass the cookie with each method call. The server can then use the cookie to find the object and communicate with it directly. In C# remoting we call this cookie this. The intialization method is the constructor and the language nicely passes the this pointer to each method (as a hidden argument).

The experts say if you use remoting it won't scale. I DON'T WANT IT TO SCALE!!!! The SOA advice is great if your building a web server but everyone is not creating applications that have to go out over the web. The advice should be targeted. Unfortunately many people are going to read what Don Box has to say and not understand that his advice is targeting applications that need to scale over the web.

My advice is that if COM and remoting are meeting your needs you should use them. If you have an application that needs to be able to scale across large number of clients then SOA may be the most appropriate.


Post a Comment

<< Home