I was thumbing through my copy of SOA Principles of Service Design by Thomas Erl, and thought I’d make a few notes on some of the standout concepts as well as notes picked up from other locations.
As usual this is going to be a work in progress…
OASIS (Organization for the Advancement of Structured Information Standards) defines SOA as:
“A paradigm for organizing and utilizing distributed capabilities that may be under the control of different ownership domains. It provides a uniform means to offer, discover, interact with and use capabilities to produce desired effects consistent with measurable preconditions and expectations.”
Principles of Service-Orientation as a design paradigm
Erl describes some of the principles of a service-oriented design paradigm in the following terms:
- Standardised Service Contract
- The purpose and capabilities of a service are exposed by a service contract.
- Service Loose Coupling
- Emphasis should be placed on reducing dependencies between the service contract, its implementation and its consumers.
- Service Abstraction
- Hide the underlying details of a service from its consumers.
- Enables and preserves loose coupling.
- Service Reusability
- Emphasises the positioning of services as enterprise resources “with agnostic functional contexts”.
- Service Autonomy
- Underlying solution logic needs to have a significant degree of control over its environment and resources.
- Service Statelessness
- “The management of excessive state information can compromise the availability of a service and undermine its scalability and potential.”
- Ideally, services should remain stateful only when required.
- Service Discoverability
- “For services to be positioned as IT assets with repeatable ROI they need to be easily identified and understood when opportunities present themselves.”
- Service Composability
- Services should be capable of participating as effective composition members.