Quick braindump on apps, services and components
Also posted to my new "blog-in-progress" here
Someone asked me for a quick email on apps, services and components. Feedback and flames welcome.
An app is a logical grouping of components and services to perform a business objective.
- Logical because the components may not all be owned by or located within the organization that built the app
- An app is built to change by swapping and versioning the services and components that make it up
- See below for suggested definitions of component and service
Services are lightweight, loosely coupled black boxes of reusable functionality that are accessed via a standardized interface.
- Services are built to last
- Once deployed, a service's contract should not be changed – it is usually better to version a contract than completely replace it (especially if your service supports multiple consumers)
- Services are not necessarily web services – a web service is merely one way in which a service can be implemented
- Services can be composed into larger constructs referred to as Apps.
- Fine-grained services result in greater reuse but may be more difficult to design
- Fine-grained services support a single, simple piece of functionality
- Fine-grained services typically result from a bottom-up approach
- Coarse-grained services typically support higher/more complex functionality
- Coarse-grained services are typically composed of two or more fine-grained services
- Coarse -grained services typically result from a top-down approach
Components are similar to services are more tightly coupled to a specific platform or technology in terms of their implementation.
- Components are typically built to last but may expose parameters or configurations that affect its behavior
- Components have very specific requirements for usage – typically in the form of libraries, dlls or databases (e.g. stored procedures)
- Components may yield better performance or throughput due to their tightly coupled nature
- Versioning components tends to be more difficult due to their tightly coupled nature
- Like services, components can be fine-grained or coarse-grained
- Components can be combined with services into larger constructs referred to as Apps