Fig. 9.1 illustrates the program architecture one would hope was used when when looking
to update, reengineer, or reuse a legacy software application.
Figure 9.1. Layers of a well-structured legacy software application.
Legacy applications that are not sufficiently componentized, such that their general
organization resembles the three layers, are not good candidates for reengineering and
reuse. More often than not, most software development projects in business are done
under fairly aggressive time constraints, therefore it it not uncommon to find an
interleaving of the layers—business logic in the presentation logic, and data access logic
in the business logic. The most widely accepted technique to reuse legacy application
components is that of Wrappering , where a new piece of code provides an interface
to a legacy application component or layer without requiring code changes to it. This