A style of software design where services are provided to the other components by application components, through a communication protocol over a network.