System Design

During the system design process the system is decomposed into a network of subsystems, each subsystem is decomposed into a network of components, and each component is decomposed into a network of sub-components:

Since subsystems and sub-components are just types of components, then we can view system design as an iterative process in which high-level components are decomposed into lower-level components:

Component Diagrams

The output of system design can be expressed as one or more component diagrams:

UML Component Diagrams

Each component is implemented as a collaboration of objects. The interaction between these objects can be modeled using a sequence diagram:

UML Sequence Diagrams

In a distributed application, components may be deployed on different computers. Although not part of the design process, it's a good idea to get a handle on assumptions about deployment and connectivity between computers. This can be captured in a deployment diagram:

Deployment

Labs

Try some of the examples in:

System Design labs

Design Principles

There are several principles that designers follow that often lead to better designs:

Design Goals and Principles (Modularity and Abstraction)

Architectural Patterns

Unrelated components can have similar designs; also, unrelated applications can have similar designs. Over the years these have been formalized and cataloged by assiduous programmers.

Here are some of the most common architectural patterns:

Distributed Architectures

Container-Component Architectures

Model-View-Controller Architecture