What is really preventing component reuse?
One of the promises of J2EE or Web Services is to allow individual "component" to be discovered and reused to form new business functions. But in reality, things are usually a bit more complicated that this.
In addition to matching the functional requirements of the component, one would need to match the non-functional requirements before a component can be reused. For example:
- What is the error behavior of the component?
- What is the scalability and performance of the component?
- How is the component being configured?
So, are there things that we can do to make specification of functional and non-functional behavior more explicit? or some language contructs to allow behavior to be modified (AOP?) ?
If we're to draw analogy between software and hardware reuse. I often find that in hardware the limitation and constraits are more clearly specified and their behavior is usually defined in ranges rather than descrete values - maybe there lies one of the reasons why software is not as reuseable as hardware.