2 years ago I created the first version of my Patterns and Anti-Patterns for SOA presentation. Since then I have presented this content around the world in many different countries over 50 times. It has been the top-rated architecture session at many Tech-Ed conferences and in general I believe has been very well received. Because of this I frequently hear from customers with a question like this (I'm paraphrasing)
"Ron - at my company there is a group that wants to build a generic web service endpoint for (... various reasons are usually listed ...) but I heard your presentation on Patterns and Anti-Patterns for SOA and I told them that this is the 'Loosey Goosey' anti-pattern but they won't listen to me. What can I do to turn them away from this madness?'
When people head down this path I believe it is because they have not fully considered the likely end result of doing so. My suggestion? Ask them to watch the video of this presentation from the US Tech-Ed (Boston 2006).
And if you don't believe me... how about a world renown expert? One of the Thinktecture guys who made 'Contract First' style development so popular with his Visual Studio add-in? Yes I'm talking about Christian Weyer.
I ran into Christian at the Ask The Experts booth in Barcelona and I thought "hmm... I have my video camera right here... why not?" so check out this video where I ask Christian about the Loosey Goosey anti-pattern.
I have a question and this is about a debate on SOA that is going on in my company.
We have a service that caters to Geography(Geo) needs for various verticals in the company. DB group purchases this Geographical database and loads it into SQL server. The Geo service provides an interface to this DB for use by different verticals.
In addition to this, there is another entity, lets say AB, that is defined by the product manager of one vertical.
The structure of AB is similar to another entity that we get from database provider, lets say CD. ( AB & CD have same structure and sometimes share names)
We have an API method in Geo that services this new custom entity.
ValidateAB(string A, string B).
Similary, for CD there is
ValidateCD(string C, string D)
Now, requirement from the vertical that defines AB is : when they call ValidateCD(),
1. it should first validateAB,
2. if the validation fails , ValidateCD()
Now, there is another vertical whose solution architect is demanding( Oh yes !)
when they call ValidateCD(),
1. it should first validateCD,
2. if the validation fails , ValidateAB()
Well, since the logic is not in ValidateCD(), they are demanding(yes!) that they should be provided an overload, something like,
ValidateCD(string C, string D, ENUM1 IncludeAB)
that does this work.
The ENUM1 can have multiple bit masks that can define the logic inside the service.
My argument is -- This is a service and it provides an interface to Geography database.
These are business rules that they should handle in their business layer. Ironically, I just came to know they do not have any business layer and their code behind page of .NET is essentially their business layer.
Also, these are website that get millions of unique users per day !
Can you please confirm if my argument is correct and does follow SOA?