25th February, 2003
Service-oriented architectures: something
old, something new
The latest buzz-phrase in the industry seems to be SOA or
service-oriented architectures. There are a lot of people
getting excited about the concept of independent components with
a published contract for interconnection and communication.
However, the service architecture is simply another
implementation of the fundamental goals of good software design.
The design principles we were given are:
Abstraction is about functional decomposition and layered design
in a top-down manner. It is the principle that guides us in the
discovery of that which must be done. Modularity is about
containing a portion of that which must be done into a
single-minded function with the simplest interface for
communication. It is embodied by two underlying measures:
Cohesion is a measure of the single-mindedness of the module.
High cohesion is desirable as it dispels confusion as to the
purpose of the module. There is no ambiguity in its use.
Coupling is a measure of the functional independence of the
module. It defines the interconnection between modules and
relates to the interfacing and complexity of interconnection of
modules. Lower coupling between system modules reduces a
module’s resistance to change, reduces the complexity of the
interconnection and therefore makes a module easier to test
comprehensively.
Structured programming languages and then object-oriented
languages allowed us to actively implement these principles. The
domain of operation for modules was restricted to the run-time
environment of the compiled program. The modules located and
interconnected with each other through mechanisms provided in
the run-time environment.
Enterprise Java Bean (EJB) and .NET technologies give us the
means to distribute modules across the network. The mechanisms
for location and interconnection are supplied by the respective
frameworks – the run-time environments for the modules. CORBA
technology preceded EJB and .NET but provided a framework for
modules of different run-time environments to interconnect.
The SOA is the next extension, allowing discovery of a module’s
interface and, location of the module and interconnection with
it. In all other respects, the guiding principles of software
engineering remain the same. These principles make no claim
upon the mechanism for modules to communicate and are
therefore not diminished in their importance by the emergence of
SOA.
Inversely, SOA remains firmly in the same universe as the
preceding software architectures, and is subject to the same
forces including those of chaos and entropy. The principles of
software design are still applicable to SOA, despite any claims
to the contrary.