Projects & Architectures

Lloyd Decker & Steven Zeil

Last modified: Dec 27, 2023
Contents:

A Software Architecture is a collection of decisions that apply globally across the entire set of subsystems of a large project.

1 Perspective

1.1 Consider Design…

 

… back in the “gold old days” of WaterFall.

A classic division would be

1.2 Too Many Cooks…

Rube goldberg conceive page

The High/Low division suggests that once high-level design is completed, different developers can work in complete independence.

1.2.1 An Alternate Breakdown of Design

 

1.3 Architectural Design

The collection of decisions that need to be common to all components.

Examples of architectural design decisions would be

Even as process models other than Waterfall have become more common, the importance of architectural design has remained.

1.4 Towards Incremental Processes

1.4.1 Iterative Development

 

1.4.2 Keeping Iterative Development on Track


2 Software Architecture

2.1 Dimensions of Software Architecture

This is my own listing – I have not seen this notion of dimensions addressed elsewhere.

2.1.1 Primary Interface

2.1.2 Deployment

2.1.3 Error Handling

2.1.4 Data Storage

2.1.5 Modular structure

3 Common Architectural Patterns

3.1 Pipes & Filters

a.k.a. Data Flow models

dimensions: modular structure (but not deployment)


3.1.1 Example: Compilers

 

3.1.2 Example: Extract

 

Extract (Maly, Zeil, Zubair, 2005-2010) was a system for extracting metadata from PDF documents submitted to the Defense Technical Information Center, NASA, and the US Government Printing Office.

3.2 Blackboard

dimensions: storage

 

The blackboard architecture was popular for A.I. projects and expert systems.

3.2.1 Example: UIMA/Watson

 

3.3 Layered Abstract Machines

dimensions: modularity

3.3.1 Example: Every Operating System Textbook Ever Written

3.4 N-Tier Architectures

dimensions: modularity, deployment

Similar to Layered Abstract Machines, but

3.5 Distributed Peer-to-Peer

dimensions: deployment, interface

A general graph of independent processes joined by a common protocol for communication.

3.6 MVC

Model-View-Controller

dimensions: modularity, interface

An approach to organizing programs featuring a GUI

 

3.6.1 MVC Interactions

 


This pattern has many advantages.

3.7 Micro-Services

dimensions: deployment, interface

“A suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.” (Martin Fowler)