Pete Lacey has a post called "
What is SOA?" where he defines SOA as follows:
"- Network
Oriented Computing (NOC): An approach to computing that makes business
logic available over the network in a standardized and interoperable
manner.
- Service Oriented Architecture (SOA): A technical
approach to NOC that has a non-uniform service interface as its
principle abstraction. Today, SOAP/WS-* is the chief implementation
approach.
- Resource Oriented Architecture (ROA): A technical
approach to NOC that has an addressable, stateful resource as its
principle abstraction. Today, REST/HTTP is the chief implementation
approach.
- Business Service Architecture
(BSA): An unnecessary term (also not an architecture) that tries to
make the obvious something special. Aka, business analysis. Aka,
requirements gathering"
I am sorry but I beg to defer.
The first thing to note (again) is the
architecture vs. architecture style differentiation I mentioned in a previous post (You can
see a similar definition by Stuart Charlton) Here is a quick reminder :
Software architecture
is the collection of the fundamental decisions about a software
product/solution designed to meet the project's quality attribute
requirements. The architecture includes the main components, their main
attributes, and their collaboration (i.e. interactions and behavior) to
meet the quality attributes. Architecture can and usually should be
expressed in several levels of abstraction (depending on the project's
size).
An Architectural style is a blue
print that can be used when you desing an architecture. An
architectural style defines some of the components and thier attributes
as weel as place constraints on how they can interact.
My
claim is that SOA is an architectural style for distributed computing
which puts extra emphasis on the interface (and hence gets the easier
interoperability). Ok, if SOA is indeed an architectural style, we
should be able to define it as a set of components, interactions and
attributes. Well, I
already did that a while ago (in a paper called "What is SOA anyway?"). And while it may not be perfect, I think it is a reasonable definition all the same:
"SOA
is an architectural style for building systems based on interacting
coarse grained autonomous components called services. Each service
expose processes and behavior through contracts, which are composed of
messages at discoverable addresses called endpoints. Services’ behavior
is governed by policies which can be set externally to the service
itself. "
You can see the above mentioned paper for a little more detail on each of the components.
ROA,
in my opinion, is just a re-branding of REST so that it would be easier
to discuss it as an architectural style and not connect it to the HTTP
implementation - which is what a lot of REST proponents are doing.
By the way,
as I pointed out before,
there are a few other important architectural styles that are related
to distributed systems like Event driven architecture, Spaced based
architecture, peer-to-peer etc.
As for "Business Service
Architecture" - I personally like to think about that as "SOA
initiative" as in the strategic decision to try to implement an SOA in
an organization while trying to achieve the more nebulous traits like
business and IT alignment etc. (which is why it is nether architecture
nor architecture style)