Architecture

Shows the overall organisation of the system, and can be viewed as a very high-level design.

Typically, it is designed by the software architect who

  • provides technical vision for the system
  • makes high level technical decisions about the project

Diagrams

Free-form - there are no universally adopted notation

As systems grow bigger, the design of the system cannot be shown in one place, and thus should be done at multiple levels.

Styles

Most applications use a mix of these architectural styles.

n-Tier Style

Higher layers make use of services provided by lower layers.

For example:

flowchart TD
	UI --> Logic --> Storage --> Database

Client-Server Style

Client-server style has one component playing the role of the server, and one client component accessing the services of the server.

flowchart TD
	client1[Client 1] --> Server
	client2[Client 2] --> Server

Event-driven style

Control flow through detection of events from event emitters and communicating those events to interested event conusmers. Used in GUIs.

flowchart LR
	emit1[Event emitter 1] --> dispatcher
	emit2[Event emitter 2] --> dispatcher
	dispatcher --> cons1[Event consumer 1]
	dispatcher --> cons2[Event consumer 2]

Transaction Processing Style

Divides workload of system down to number of transactions which are given to a dispatcher that controls the execution of each transaction.

flowchart LR
	trans1[Transaction creator 1] --> dispatcher
	trans2[Transaction creator 2] --> dispatcher
	dispatcher --> exec1[Transaction executor 1]
	dispatcher --> exec2[Transaction executor 2]

Service-Oriented Style

Builds applications by combining functionalities packaged as programatically accessible services.

Other Styles

  • pipes-and-filters
  • broker
  • peer-to-peer
  • message oriented