Designing Component-Based Applications