Network Application Architectures
ASP is a relatively new technology, but people have been
building network-based applications for many years. To help us
see where our components fit, it's worth taking a look at the
options available for network development as whole, since the
same considerations will be relevant when it comes to designing
our component-based solutions.
Two-Tier (or Client–Server) Systems
Older types of network application were invariably made up of a
server (which did the real grunt-work of running the
application) and multiple clients (which connected to that
server). The clients provided instructions to the server and
accessed the results it produced. The clients in this situation
are referred to as thin clients, because they do not have to do
much work—most of the functionality is hosted on the server.
As time went by and computing power got cheaper, the
temptation was for the clients to perform more of the processing
work, easing the strain on big expensive servers. When more of
this processing work is passed to a client, the typical client
application needs to contain all the code needed to process the
required tasks. If such a client were accessing a database, for
example, the client application would need to be capable of
accessing the database and manipulating that data—while the
data alone still resides on the server. This is known as a fat
client because some of the processing has been passed onto it.
While this relieved the load on the main server, any changes
either to the client or to the database then have rippling
effects across all client installations. Any changes that need
to be made are not just made to the central server; each
individual client has to be updated for each change, and
potentially several different applications have to be recompiled
and updated if data manipulation and access code is shared
between them.
To help reduce the maintenance of 2-tier systems, database
views and stored procedures can be used. Both provide an
elementary level of indirection that can sometimes help reduce
the impact of database changes on client code. However, neither
works very well in the case of distributed, heterogeneous
databases; unless the same provider (SQL Server, for example) is
used for each database engine, and inter-database interoperation
is non-existent. This means that stored procedures have to be
duplicated, which can be a potential concern for enterprise
applications.
As computers spread into more areas of the workplace, the
demands on computer-based applications rose rapidly. These
applications are often referred to as enterprise applications,
and incorporate many servers and data stores. They tend to be
organic in that they are always growing, and tend to be
difficult to design and to maintain.
To help programmers work with programs and data spanning
increasing areas, it made sense to divide up the application
into layers or tiers. The important thing to remember when
talking about tiers in an application is that they can be
logical or physical.
A physical tier is one that actually resides in a distinct
physical place, while logical tiers are more conceptual way of
thinking. Logical tiers help us plan and view the different
parts of an application, removed from concerns about where they
reside physically.
Thinking about architecture changed, along with the expansion
of networked applications, to three-tier models. We shall take a
quick look at this next so that you can understand where we are
using our components (you may also have heard of n-tier
applications, which are an extension of the three-tier model,
and which we will come back to in Chapter 5).
Three-Tier Applications
You can view the client–server model as being a 2-tier
application structure. This is extended in the three-tier model
by the addition of a middle layer that sits between the client
and the data sources. The three physical tiers break down as
follows:
q The client tier is the front-end tool with which the end
user interacts. It may take the form of any type of user
interface, such as a Visual Basic application, or (increasingly
commonly) a web browser. In ASP applications, the client tier
usually takes the form of a web browser.
q The middle tier (also referred to as the business tier)
represents most of the logic that makes the application
functional. In the case of ASP this is where our ASP pages
reside, upon the web server.
q The data tier represents the storage mechanism used to hold
persistent data. This could be a relational database, text-based
file, directory, mail server etc.
The Client Tier
The client browser requests an ASP page from the server, and is
presented with an HTML form for entering data about the size of
wall and brick. The user then clicks on the Calculate button,
which sends the form details to the web server. Later, the
client receives the response from the web server and displays
the results of the calculation.
The Middle Tier
This is where our web server resides, holding (amongst other
things) the ASP pages and our components. When the client
requests the form, the web server creates it as HTML using
WroxBloxForm.asp. When the user clicks Calculate on the client
end, the values are sent to WroxBloxResult.asp.
WroxBloxResult.asp creates an instance of the BrickCalculator
component, also on the middle tier, which uses the passed
parameter values to calculate the number of bricks required, and
returns the result to the page. The page then writes this back
to the client.
In this case, all of the logic of the application, creating
the component, and calculating the number of bricks required,
goes on in the middle tier.
The Data Tier
OK, so our example doesn't use the data tier. However, if we
needed to collect or store any persistent data in a database,
such data would reside in this tier. Busy sites will gain great
performance advantages from actually having the database
residing on a separate physical server, because databases
typically require a lot of system resources. During the design
phase, this is not always possible—but the notion of a logical
data tier still exists, whether or not the database resides on a
separate server.