Not Quite a Classic Blunder

Death isn't on the line, so I feel safe going against Sam Marcuccio in this discussion. I'll start at the bottom of Sam's post and work my way up. The last line says "The really funny part of all this is, based on the argument, you'd never guess which on of these guys works for Microsoft". I know there was a smiley face after that, but I'm totally confused. To the extent there is an official Microsoft position on service orientation, Rich's position is it. Sam thinks we're arguing over semantics. He's right, but not in the sense he means. The argument isn't over semantics in the common, rather narrow, sense of the meaning of particular words as much as it is over the use of language to communicate ideas. Rich and I have very different ideas about how to use language to construct useful models for describing software design. Sam also thinks that my position is technology centric and nothing could be further from the truth. Using WS* technologies doesn't make you SO.
 
Sam says he agrees with just about everything Rich Turner had to say about SOA, but I wonder if Sam ever read Rich's comments here.  Rich says that the four tenets are mandatory. This is the crux of my disagreement with Rich and his co-workers at Microsoft. It's also where I think Sam misunderstands Rich's position. If you believe that the four tenets are mandatory, you believe that they define service orientation rather than describe it. If the four tenets define service orientation, then it's obvious that there is no such thing as SOA. No real software architecture can be defined by those four tenets. If, on the other hand, you believe that the four tenets represent a description of service orientation, the situation is completely different. Architectures can be described as more or less service-oriented and evaluated on how well they meet the needs of their users. As David Ing has described so well, the four tenets can't be taken as revealed truth by those of us who actually build enterprise systems.
 
If Rich's position is correct, then every single application built with Indigo will be service oriented. I can guarantee that not every Indigo application will have the wonderful qualities from Code Complete that Sam describes. Indeed, given the heavy promotion of [DataContract] and its related attributes, I can guarantee that most Indigo apps will be more tightly coupled than the typical ASMX application is today (and that's really disappointing). Not because [DataContract] will inherently create tightly coupled systems, but because it will enable tightly coupled distributed object designs to claim service orientation while still suffering from all the failings of distributed objects. The Indigo team's "we learned SO so you don't have to" attitude will inevitably result in applications that won't get the full advantage of the Indigo platform.
 

Posted May 28 2005, 04:51 PM by john-cavnar-johnson

Comments

Steve Maine wrote re: Not Quite a Classic Blunder
on 05-28-2005 3:56 PM
Just some personal thoughts:

Not to beat a dead horse, but the concept of "service orientation" is orthogonal to the concept of "Service Oriented Architecture". "Service orientation" describes characteristics of a central abstraction (the service) that is used as the focal point of complexity management within a software metasystem. SO says nothing about the internal architecture of the systems that particpate in that metasystem, aside from the fact that they are externally organized around these things called services that adhere to the 4 tenets. The 4 tenets define what a service is, not how systems are built around services.

Here's a question: what are the Three Tenets of Object Orientation? Encapsulation, inheritance, polymorphism. Those three things definte what the term "object" means in the context of object-orientation. That's a completely separate thing from "object-oriented analysis and design". The 3 tenets of object orientation don't define "object-oriented architecture" any more than the 4 tenets of service orientation define service orientation. That doesn't mean that SOA doesn't exist -- just that SO != SOA (QED).

Indigo will make it easy for developers to create abstractions that adhere to the principles of service-orientation. The product team has intentionally chosen not to adopt features of existing stacks (e.g. the ability to directly pass object references around in .NET Remoting) that don't adhere to those principles. What it doesn't do is design your app for your - it's up to you to design the shape of your services in a way that's appropriate for the specific problem you're trying to solve. That said, I think Indigo will make it harder to shoot yourself in the foot architecturally than previous stacks.

Regarding [DateContract] introducing tight coupling, I'm unclear as to how you draw that conclusion. [DataContract] is all about manifesting data on the wire that is versionable by default and free of type-level dependencies. It's very different from distributed objects because [DataContract] does not project behavior. It's impossible to couple an application to the behavior of a [DataContract] because they (by definition) have no behavior. Do you have specific concerns about [DataContract] that the product team might be able to respond to?

Mohair Sam wrote Inconceivable!
on 05-29-2005 2:48 PM

Add a Comment

(required)  
(optional)
(required)  
Remember Me?