code prole


coding for the proletariat since 1977

Components Scale

Recently at work we’ve been discussing components and how to classify them. It occurrs to me that what is missing in most definitions of components is the context. The context determines the scale of the component.

A Java class is a component, and a simple application utilizes one or more classes as components in completing it’s function or purpose. A larger application may utilize individual classes or call upon a service that choreographs the efforts of several classes or services. From the viewpoint of the application the objects it calls are components. In this example the individual class may no longer be considered a true component – it’s just a building block.

In any given business there will always be a context through which the application is viewed. Having that context is necessary in order to see the components that make up the application. In the context of a small expense tracking program the component scale is small, individual classes, maybe even methods within those classes. If, however, the application is something as large as MIDAS, then there would be layers of components. At the highest enterprise level, the components would be entire applications. Once you move down to that level the components would be business service orchestrator (I’m hesitant to use the work aggregator due to it’s UML implications). Once you drill down to the business service orchestrator the components become functional services and perhaps technical infrastructure supporting objects.

For me at least, having a taxonomy of components that differentiates between business component and technical component, service and embedded, isn’t really useful. What is useful is being able to scale your viewpoint to see the next layer of services or functions from the viewpoint of the current requestor. If it helps people with poor(er) visualization skills to think of enterprise components utilizing business components, which in turn orchestrate functional or technical components, which are comprised of language components, then so be it. But to my way of thinking a component is any self-contained, reusable function or service exposed through a stable and well defined interface.

Just my $0.02.


Filed under: Concepts, Software