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.
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:
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
Point taken samir, I will try to cover that in another blog.
Post a Comment