By Patrick van Bergen

Introduction

The idea behind this site is to give myself and other programmers a high-level easy-to-understand overview of common architectural patterns in software. It is meant as a source of inspiration for those who are asked to create some program and have really no idea what it should look like or where to start. I hope you enjoy it.

Data Flow

An architecture has a data flow aspect and a control flow aspect. The first describes functional modules and data transfers. The second describes the way control is passed from one part of the system to the other. Here we describe a number of frequently used architectures. They are described from a data flow perspective.

  1. Model-View-Controller
  2. Presentation-Abstraction-Control
  3. Pipe-And-Filter
  4. Layered Systems
  5. Microkernel
  6. Client-Server and N-Tier Systems
  7. Repository
  8. Blackboard
  9. Finite State Machine
  10. Process Control
  11. Multi Agent System
  12. Broker a.k.a. Service Oriented Architecture
  13. Master-Slave
  14. Interpreter a.k.a. Virtual Machine
  15. Hub-And-Spoke
  16. Message Bus a.k.a. Event Bus
  17. Structural Model
  18. Peer-to-peer

Control Flow

Control flow describes the way activity flows through the application. For starters, an application may consist of a single process, that performs sequential executions, subroutine calls and loops. But the application may also consist of several asynchronous processes. But even if the application has only a single thread of control, it may emulate multiple simultanuous threads.

Even though a single thread can at the lowest level only do loops and subroutine calls, at a higher level of abstraction it can create all sorts of control flows. Take Implicit invocation for example. At the lowest level it's just subroutine calls. At a higher level it's modules that become active when they receive an event that was sent earlier on by a different module. Often the application contains a specific module to create the control flow.

I found that two characteristics stand out to describe control flow: command structure (Control Tree or Control Loop) and order of execution (Parallel or Sequential).

  1. Call And Return a.k.a. Main program And Subroutines
  2. Implicit Invocation a.k.a. Event Based
  3. Manager Model
  4. Emulated Parallel

Books