My understanding of SOA was helped with knowledge of some higher level messaging terms.
One way messaging.
- Send a message, you may get 0, 1, + responses.
- Don’t tie up resources waiting for the answer.
- A request to do something.
- Owned by the destination system.
- Present tense.
- Not sent between services
- Open Door
- A notification that something has happened.
- Owned by the source system.
- Past tense.
- Riased by one Service, Consumed by another Service
- Door Opened
In the software world, any process that can be automated gets automated.
Compilers are an example of this. The build process for a software system is now effectively zero, because compilers do the build for us. We get build for free.
Too enable this process, we need to provide the compiler with an unambiguous specification. This is the function of a programming language. Where the English language was too ambiguous, programming languages have been designed to allow a person to provide an set of instructions to a computer that can be followed without question.
So what does a software team do? They find and interpret requirements, to provide a detailed specification that can be turned into a software system.
As the number of people involved in a build process increases, they will inevitably split into teams. Each of these teams then focuses on designing their part of the system.
So what does an Architect do? They make sure that the detailed specifications of the teams can be brought together into a software system.
Approachs such as layering, n-tier, and SOA, are simply attempts to structure software to allow independent teams of people to develop these specifications to be built as parts, and brought together to form a working system.