Thursday, May 10, 2007

How to identify components in architecture - I

I never thought I would be posting my second blog so late. Actually I wondered how anyone would get to my blog! Thanks to Divyesh, I realized orkut is the way to go for being noticed.

This is my first tech blog and it is interesting!

In the past few months, i have done this twice and I m not satisfied or rather clear about it. No I m not referring to two blogs ;). Twice i had to go through the process of identifying components in a system for 2 different projects.

Component Based Software Engineering or CBSE, is a software engineering discipline wherein a system is decomposed into functional components having well defined interfaces. The concept is to build a system as an integration of several blocks a.k.a component leading to a modular solution. Keep in mind that components are usually at a higher level of abstraction in terms of 'time and space' than objects as in OOP. The key benefits accrued from CBSE are -
  • Software Reuse - Of course if you ever need the functionality again, you can use the component
  • Pluggability - I like this! Although not a standard quality attribute what this means is you can safely replace one implementation with another and cause little or no impact elsewhere in the system
  • Smooth Evolution - It is well known that software systems evolve over a period of time. Decomposing into functional components makes the system evolve in a consistent manner without making a mess thus retaining the maintainability
  • Higher probability of success - This takes the icing and the cake with it! Do you throw away the whole furniture if only a single chair is broken? No. In the same way if a portion of a system is broken, which in CBSE is a component, you only need to throw that component away. The system can still be built and project can continue although with a certain amount of delay.
CBSE is also referred to as CBD or Component Based Development and the architecture itself is called as Component Based Architecture.. I suppose thats enough for background.

So how to identify components ? Wait.. we are not ready yet for that. Before we do that we need to know the difference between 'Logical Components' and 'Physical Components'. I m going to defer it to my next post.

If you have any ideas on CBSE, i m willing to know!





2 comments:

Samir said...

Good thoughts...

It will be nice to discuss how can we address common concerns in this component based design. (e.g. logging) and thats where aspects aids a lot. Aspects helps to build cross component concerns at one place giving you freedom to build your components.

- Samir

G. Sriram said...

Point taken samir, I will try to cover that in another blog.