Software Architecture has been evolving since Software is separated from hardware. As software is treated as a ‘Product’ that runs on a computer, a Software is also require to be designed and built properly such that the software can run on a hardware.
Software is becoming increasingly sophisticated. The designers and writers need to worry about not only writing the software to solve problems but also increasingly worry about maintainability and extendability. These future vision of how the software may evolve challenges software designers. The designers need to incorporate those future directions of the software into account at the time of design/architecture.
One such architecture that has taken hold in the software design/architecture is Service Oriented Architecture (SOA).
SOA is an architectural style whose goal is to achieve loose coupling among interacting software agents.
In other words, SOA is an architectural style, realized as a collection of collaborating agents, each called a service, whose goal is to manage complexity and achieve architectural resilience and robustness through ideas such as loose coupling, location transparency, and protocol independence.
Most of the time SOA is equated with Web Services. However, this is an unfotunate interpretation of SOA. SOA is a style that allows designers to loosely couple with protocol agnostic components or applications. When building an application, a SOA designer shall define clearly the application service. The implentor shall define the protocol and method of service request; for example, if the implementor is to use Web Services a medium of communciation, then WSDL will define the details of interfacing with the system. If the implementation is to use JMS messaging (fro example request/reply), then the message schema and JMS Message Configurations shall define the details of interfacing with the system.