Enhancing Software Reuse through Application-level Component Approach