February 15, 2004
@ 08:27 PM

I am currently writing the speaker notes for a service-oriented architecture workshop that Microsoft and newtelligence will run later this year. I was just working on the definitions of components and services and I think I found a reasonably short and clear definition for it:

One of the most loaded and least well defined terms in programming is "component". Unfortunately, the same is true for "service". Especially there is confusion about the terms "component" and "services" in the context of SOA.

The term component is a development and deployment concept and refers to some form of compiled code. A component might be a JVM or CLR class, a Java bean or a COM class; in short, a component is any form of a unit of potentially reusable code that can be accessed by name, deployed and activated and can be assembled to build applications. Components are typically implemented using object-oriented programming languages and components can be used to implement services.

A service is a deployment and runtime concept. A service is strictly not a unit of code; it is rather a boundary definition that might be valid for several different concrete implementations. The service definition is deployed along with the components that implement it. The communication to and from a service is governed by data contracts and services policies. From the outside, a service is considered an autonomous unit that is solely responsible for the resource it provides access to. Services are used to compose solutions that may or may not span multiple applications.

Let me repeat the one sentence that made me go “damn, I think now I finally have the topic cornered”:

A service is strictly not a unit of code; it is rather a boundary definition that might be valid for several different concrete implementations.

Monday, February 16, 2004 6:31:44 AM UTC
How is a service different from a component's interface, then?
Monday, February 16, 2004 7:01:10 PM UTC
A definition of service from http://www.service-architecture.com/ is "A service is the endpoint of a connection. Also, a service has some type of underlying computer system that supports the connection offered.".

http://weblogs.asp.net/pgreborio
Thursday, February 19, 2004 10:19:22 PM UTC
Your component definition is different from the one Szyperski uses in his book "Component Software". His definition of a component is a more coarse granular one. Such as an assembly.

Best Regards,
Jimmy
www.jnsk.se/weblog/
###
Friday, February 20, 2004 8:03:30 PM UTC
For me, the big difference between a component interface and a service interface is that a service interface is concerned purely with getting data into and out of the service. In otherwords, the interface is very simple (in my services - not a million miles away from REST for example.)
A component interface on the other hand, varies from exposed object type to exposed object type. With services (in my view of them) there is no exposed interface in the API sense. All intent is tunnelled into the data and expressed in the data contract.
regards,
Sean
Tuesday, February 24, 2004 1:48:34 AM UTC
My definition is much more simple.

A component *is* something.
A service *does* something.
Matthew Phillips
Tuesday, February 24, 2004 11:50:15 AM UTC
Also, a service is a component, see:

http://www.mindreef.com/people/markericson/weblog/index/P202/
Wednesday, March 10, 2004 2:06:51 AM UTC
Am glad to see Clemens iterating on what Services are and are not. I have also been blogging on this subject following a number of intense discussions inside the Microsoft.

We all need to remember though, that while services expose some features similar to components (interfaces, etc), they also have distinct differences - something I discuss in http://blogs.msdn.com/richturner666/archive/2004/03/02/83009.aspx.

Rich
Comments are closed.