Projects & Architectures

Thomas J. Kennedy

Last modified: Nov 30, 2020
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

 

As a counter-reaction to what many believe to be an overly rigid waterfall model, there are a variety of incremental approaches that emphasize quick cycles of development, usually with earlier and more user-oriented validation.

There is a greater emphasis on producing intermediate versions, each adding a small amount of additional functionality. Some of these are releases, either external (released outside the team) or internal (seen only by the team), which may have been planned earlier.

1.4.2 Incremental Development


Iterative versus Incremental Models

Incremental development is almost always iterative, but you can be iterative without being incremental.

1.4.3 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)