Last week as Guest Lecturer I delivered the SOA talk at NUS ISS (Institute of System Sciences). My lecture primarily focuses on analyzing the pros and cons of different options in the course of developing SOA enabled solution, and showed some high level design of the EHR product I had personally designed and developed before I joined my current employer - MOH Holdings Pte Ltd.
Below I highlight the key points I talked about
1. SOA is essentially applying the OCP at solution level.
The benefits of SOA are to i) reuse IT asset and ii) agility to respond to new/changing business needs. These are the essentially the natural outcome of appropriately applying OCP (Open for extension, Closed for modification principle) at cross-system boundary solution level design.
On another related point, the GoF design patterns are also mostly the outcome of applying OCP at Object Oriented design level.
2. Designing an architecture requires much more than just applying SOA style.
Developing architecture is not simply defining list of services to be developed. In the industry, there is general tendency to create proliferated services to show the that each part of the solution architecture is using services thereby the demonstration of SOA as whole.
This tendency is similar to the phenomenon more than 10 years ago, when EJB 1.0 was in use, most of the developers tended to 1) create entity bean for each table, and 2) strictly follow Sun J2EE Facade design pattern where every business transaction is fronted with EJB session bean with backend EJB entity bean.
3. Some key design decision options to make as shown below
There is no absolution 'right' or 'wrong' approach when adopting SOA, ultimately we need to analyze the pros and cons of different option for the specific business problems we are trying to solve, and fully realize the benefits of SOA - Reuse and Agility. Take the example of whether to use loosely defined or tightly defined XML schema, I recommend to analyze the cost impact at three dimensions