SOA Patterns?

Dave Linthicum writes about why patterns can be key to SOA solutions. Being a patterns enthusiast and practitioner, I agree with what’s been said in spirit. But, having been through the process of identifying and documenting the enterprise Java patterns, I am cringing at one thought he expressed there of creating a database of SOA patterns. I am afraid that I don’t buy this approach entirely. Such a database is going to cause more problems than solve anything.

Patterns don’t live in isolation, they really create a network amongst them (of inter-relationships) that increases the value of the set of patterns as a whole. A single pattern itself, while useful, has limited applicability. Whereas with a set of patterns and relationships, you can start understanding the key pattern heuristics and eventually lead to a pattern language, which is the ultimate goal of any patterns practitioner. This was the hardest part of pattern discovery in our (me, Dan & John) enterprise patterns work, where you can see one such example of pattern relationships (and here) to help you better understand the community of patterns, rather than just a single pattern.

For an example of a patterns database, take a look at the Server Side patterns database, while commendable and has incredible participation, the patterns submitted there lack such a language of relationships and thereby exist at multiple levels of abstraction which do not inter-relate very well.

Published by


Cofounder & CTO @

2 thoughts on “SOA Patterns?”

  1. Hi, Deepak!

    I have tried many ways to find your email contact, but I didn’t get yet. So I have to post some stuff here which is not related to your post above.

    I have read your article “SOA Service: Coarse or Fine, Must Make a Dime! ” . Your idea is really interesting but practical. I still have a question on service granularity. Maybe you have a answer.

    People always think fine-grained services are more reusable than coarse-grained services. But I’m confused by the example below:

    Fine grained:
    GetCustomerName(string id);
    GetCustomerAddress(string id);

    Coarse grained:
    GetCustomerInfo(string id); //which returns name and address.

    In this example, when we need name, we can use GetCustomerName or GetCustomerInfo. When we need address, we can use GetCustomerAddress or GetCustomerInfo. It meas we can use GetCustomerInfo to replace GetCustomerName or GetCustomerAddress. Does it means that GetCustomerInfo is more reusable than GetCustomerName and GetCustomerAddress? Then in this example we can get that coarse-grained services are more reusable than fine-grained services.

    Could you tell me what’s wrong with my idea?



    btw: if you would take your time to aswer my question, plz send a copy to my email, so that I can get it immediately. Thanks.!

  2. Hi Deepak,

    Good articel.

    I onceagain got the feeling of reading your book “Core J2EE Patterns: Best Practices and Design Strategies.”

    Keep posting 🙂

Comments are closed.