Common Architectural Styles

There are a variety of software architectural styles; there are many software architecture books that discuss them in detail. Here are some useful links:
Garlan and Shaw

These styles are not mutually exclusive; for example, you might build a state-machine in an event-driven environment.

Sequential architecture

The traditional way we write programs is still used in many software designs. The primary reasons are:

  1. Most programmers are taught to think sequentially.
  2. Some programming languages don't support other architectures.

Pipe-and-Filter architecture

A sequence of filters process data and produce a new version of the same data. For instance xslt transforms xml data into html.

State-machine architecture

Used extensively in industries where systems are modeled well as state machines. (e.g. process control, telephony)
There is an entire industry (process control systems) devoted to providing tools and support for such development.

Parallel architecture

A parallel application includes two or more tasks (processes) that together comprise the software system. Parallel applications can run on a single computer or a parallel processor.
Good reasons for writing a parallel program.

  1. The system is best modeled as separate processes (e.g. Jukebox)
  2. Maximum performance is important.
  3. The system is too complex for a sequential solution to be possible.

Event driven architecture

An event driven program comprises a set of functions that are called by the environment. (e.g. processLeftButton is called when the user presses the left mouse button)

Modern graphical environments (e.g. Windows, Motif, Java AWT) are event driven environments; you have little choice if your platform is one of those.

Real-time systems are also event-driven; events are external interrupts that trigger an appropriate function.

Client-server architecture

There are at least two programs. One, the client, requests information or services from servers. Servers provide services to clients. Generally, the two programs are on different computers but this is not required. Client-server architecture is increasing rapidly in popularity in the 1990s for a variety of reasons:

  1. Customers want open architecture solutions from multiple vendors.
  2. Separation of functionality. (e.g. database and database viewer)
  3. The economy of scale => small computers are cheaper.
  4. The MIS organization can retain control of the servers.

Layered or Multitier architecture

Software components are divided into layers. The layers are generally separated by interfaces. Dependence on interfaces makes the components within a layer interchangeable. A common three-tier layered architecture consists of a presentation layer, business layer, and data layer.


Adapted from Dan Stearns
Lasted modified on 11/1/06