Service Oriented Analysis and Design. So today I’ve been reading about Service Oriented Architecture and Design concepts. It seems to be an interesting development in the arena of Systems Analsysis and Design. From what I’ve read so far, it takes elements from Enterprise Architecture, Business Process Modeling, and Object Oriented Analysis and Design.
The central concept of SOAD is that it further abstracts concepts in those three areas into real life (for example Web) functional concepts. Operations, Services, and Business Processes. Operations are Logical Units of Work. For example a software component that could retreive an attribute, like getFirstName(). A Service, is simply a grouping of these operations, like getUserProfile(). And a Business Process is a grouping of Services, like createNewUser().
Part of the reason this has come around is the age old problem of what do we do with our old systems? Typically when you design a new system, you do a top down approach, map out all the actors and objects, map out sequences of events, and how objects interact. But when you want to integrate it with an existing system, you must also do a bottom up analysis, and meet somewhere in the middle. Service Oriented Analysis optimizes this experience, by allowing one to do a holistic analysis of the Business Services that are provided by a system.
So essentially SO is like OOAD (Object Oriented Analysis and Design) but it blurs the details of the Class and Object relationships so you can focus on higher level, more important concepts like Services.
Then you start getting into how you descibe these Services and interactions. For example a common one on the web is WSDL (Web Service Description Language) based on XML and using SOAP. So to interact with someone’s web service, you use a service directory to first search for and find a service that fits your needs. These are often stored in UDDI (Universal Description Discovery and Integration) on some sort of Directory. Once the appropriate service is found, you can use the WSDL to connect to it. The WSDL will describe what sort of methods can be used, what port to connected to, basically all the information an Actor would need to get or put information into a system. It can also describe constraints such as order of operations and such.
With that in mind, you start to see how new web applications and systems can be designed with Services in mind, rather than just simple classes and objects. From what I have so far, this is one more level of abstraction that will allow much more transparencies between different systems, and will help move towards the ‘Data Everywhere’ model that is demonstrated by web applications such as salesforce.com or facebook.com.
I know I’m not an expert on this, so no flames please. I’m simply exploring some new ideas in an area that I happen to be researching at the moment.