The first thing I look at is the Service Capabilities. These I model as Requirement elements as then I can model the linkage back to business goals, stakeholders, drivers, principles etc. For this version I have created 3 prospective capabilities:
- Search current inventory for stock
- View Product detail
- View Products commonly purchased with a given Product
So the proposal is to group these 3 capabilities together so that consuming systems only need the one interface.
Figure 1 - Service Contract |
We have also identified our basic information architectecture by showing the business objects the capabilities are associated with. We now have enough information to determine how agnostic our service is going to need to be.
The next step is to model the realisation relationships of the service contract. First I model the Contract as a descriptive data object, in this case a WSDL object. Then the behavioral elements that realise the capabilities.
Figure 2 - Service Contract and Capability realisation |
The behavioral elements are assigned to an Interface which is the equivalent of a portType in WSDL 1.1 or Interface in WSDL 2.0. In this situation the capabilities and behaviors can be mapped to operations one for one but that may not always be the case. An alternative view can be presented with a single behaviour for the port type and the capabilities linked into it.
Figure 3 - Alternative Service Contract and Capability realisation |
A quick mapping of our data model to show the realisation from business objects to data objects results in:
Figure 4 - Data Model Realisation |
Figure 5 - Service Candidate |
The next and final step to be shown here for the service contract is the technology layer. The goal now is to express the assets for the contract and the infrastructure interface and behaviour.
Figure 6 - Technology layer of the contract |
The first thing to notice is the data has shifted from the right to the left hand side. Here I am showing the data defined by the XSD and the XSD imported into the WSDL file. The binding interface accesses the wsdl file. The behaviour element is not accessing any data objects as I have not modeled how the data is to be retrieved, this view is purely showing the contract for the service.
The major benefits I find with this is once you start to build up your library of capabilities you can very quickly trace through to find reusable services for new compositions and also navigate based on the Information Architecture of your business objects for applications and services.