DekGenius.com
[ Team LiB ] Previous Section Next Section

Chapter 4. Advanced Presentation Tier Design

The patterns discussed in the previous chapter give a broad framework for the presentation tier. Now it's time to dive into the details. This chapter looks at more advanced design patterns for the presentation tier, with a specific question in mind: how can we build reusable components?

Reusable components are something of a holy grail for programmers. Many developers and companies believe that programs, like cars or computers, ideally should be assembled from off-the-shelf pieces. There are many advantages to a component-based development model. Shorter development time is one. Lower price is another: reusing a component spreads the development costs out over time, and also reduces the risk of bugs, since the component has already proved itself in previous uses. When the risk of bugs is lowered, testing can focus on new code, further reducing costs and time.

With all these advantages, why aren't more developers building applications from off-the-shelf components? One explanation is economic: so far, no one has been able to build a successful business model around software components.[1] But more often than not, the reason is that designing reusable components takes time and effort. Reusable components require up-front design, not after-the-fact retrofitting. The interfaces and dependencies for each component must be clearly defined. Interfaces must be kept simple and dependencies to the bare minimum. A component with clear, simple interfaces is easy to test, replace, repurpose, and reuse.

[1] This problem may soon be solved with the rise of web services.

This chapter focuses on patterns for breaking the presentation tier down into small, reusable components. We will look at these patterns:

Service to Worker

Describes how to divide a controller into reusable navigation and actions.

View Helper

Shows how to encapsulate related functions in a view into a single, reusable object.

Composite View

Separates the view into multiple subviews.

    [ Team LiB ] Previous Section Next Section