Does SOA introduce new/original architectural concepts?
James McGovern asked in a recent post: "Would love to see you explain why SOA isn't an architectural style? Do so in your next blog entry at your own risk". I thought I would take a stab at clarifying what I meant when I opined that: "Service Orientation does not prescribe a particular architectural style".
Anyone who has been involved in software or systems architecture during (at least) the last 30 years will be well aware of the many guiding principles that we (at least try to) follow when we design computer systems. Many of these principles are based upon bitter experience. Some are based upon common sense. The Patterns Movement popularized by the Gang of Four, Martin Fowler, etc, has gathered together commonly-found architecturally-sound patterns that can be readily applied to real systems.
During all these shifts from Today's buzz-term is "Service Oriented Architecture" and we're told that this is the silver bullet that we've all been waiting for. We're told that it's fresh, it's new and that it requires us to completely rethink how we've been designing software thus far.
I disagree.
To me, and many others with whom I have enjoyed discussing this subject with, Service Orientation is the minimal set of guidelines that help us design and architect systems whilst avoiding much of the ambiguity that currently complicates our world and which will help redefine the assumptions we make when designing a system to help us adopt a more pragmatic view of the world and to design systems that are more flexible, agile, resilient and usable than systems we might have architected in the past.
Sound architectural principles are sound architectural principles for a given bounded scenario. Many of these principles are applicable and appropriate to a to a given bounded scenario regardless of the architectural approach or methodology we use - be it object-oriented or service-oriented. The principles of Service Orientation are equally of value when building a distributed system using a traditionally object-oriented technology such as J2EE or COM+ as they are to those building Web Services using JAX-WS or WCF. Let's not confuse architectural principles with particular technologies which may have gained popularity at some point in the past but have since been superseded by more appropriate technological approaches.
Hope this helps clear up my comments before. Let me know if you think I am wrong.