Monday, March 02, 2009

Priciples of SOA

Was reading "Thomas Erl's book - Priciples of Service Design" over the weekend.
It's an interesting book with a lucid language and simple to understand examples. 
Jotting down some of the design principles for SOA:
  • Services should be platform neutral and programming language neutral
  • Services should have a standard interface contract
  • Services should be loosely coupled
  • Design for coarse grained services
  • Service Abstraction - Hide information that is not required by clients. Hide underlying technology details. Promotes loose coupling.
  • Service Reusability - Position services as enterprise resources with agnostic functional context; i.e. the service can be used in other functional scenarios too. Always design the service in such a way, that it can be used beyond its original context.
  • Service Autonomy - Services need to have a high degree of control over their underlying runtime execution environment. The higher up a service is in a typical composition hierarchy, the less autonomy it tends to have due to dependencies on other composed services.
  • Service Statelesness - defer or delegate state to databases, rather than in memory.
  • Service Discovery - services can be discoved using standards such as UDDI.