This article looks at how to turn an existing software that is not service oriented into a service that can be used in a service oriented architecture. We need to know exactly- what is a service? We are assuming the resulting service will provide identical functionality. So the only difference between a software service and other software components is at the interfaces. The interfaces define how the service can be used individually or as part of a larger system. In summary a service needs to achieve the following properties :-
- is self contained, highly modular, and can be independently deployed. A service can do something useful in its own right.
- is distributed component, accessible over the network or locator other than the absolute network address.
- has a published interface, so users only need to see the interface and need not to know the internal details of the implementation.
- is discoverable, meaning users can look it up in a special directory service where all the services are registered. Services designed for public use require to be discoverable, otherwise potential users may never learn about the service.
- stresses inter-operability such that users and providers use different implementation languages and platforms. That is any software can be turned on a service for use with other services regardless of the languages in which they are implemented.
- is dynamically bound, which signifies that the service is located and bound at runtime. Therefore service users do not need to have the service implementation at build time.
Therefore, turning a software system into a service consists of encapsulating the software such that it is exposed to the web via well defined and flexible network accessible application programming interface (API). This can only happen using a set of inter-related technologies. Currently web services provide a technology suite that can provide the above listed characteristics.
Our next article will relate the technologies in web service to the properties of a service.
“Until the problem is well defined and articulated it is impossible to arrive at a solution”
The first step to solving any software engineering problem is to define the problem. Articulate the problem and eliminate all unnecessary terminologies and jargons. Start by reading the problem completely at least twice. Read and establish the context of each key word. If time allows, research about the problem.
Ensure that there is agreement on the problem to be solved. Try to restate the problem in you own understanding. Find out from the person who posed the problem whether the restated problem is the same as the original problem. Identify instances of the problem and see it is possible to solve an instance or example problem A solution to the example problem may lead to insights about how to solve the general problem or bring about any remaining misunderstanding.
Look at the problem from multiple perspectives. Each perspective may reveal additional information about the problem. The problem should be distinguished from its symptoms such that the root cause properly identified and stated.
The output of this step is a well-defined and articulated problem that focuses on what is required for its solution.
Programming is the process of planning a sequence of steps called instructions for the computer to follow. The fact that you are reading this post you already know that computers lack common sense and cannot make any judgment. So the computer will do as instructed by the programmer through the computer program. Programming is more about problem solving than coding.
A problem is the difference between things as perceived and things as desired. A solution will move the situation from the things as perceived to the things as desired.
Programmers are problem solvers and need to improve the art and science of problem solving. On one hand problem solving involves an element of art in that experience, judgment and common sense can help deliver smart solutions. On the other hand problems solving is a science involving scientific means of arriving at solutions. Overall, there are several steps to be taken to solve problems
- Define the problem
- Analyse the problem
- List/Identify alternative solutions
- Select the best solution
- List instructions that lead to the solution using the selected solution
- Evaluate the solution
in the next post, more details on each step shall be discussed