Architecture & Modeling

A software architecture separates the overall structure of the system, in terms of components and their interconnections, from the internal details of the individual components.
Software Architecture in Practice, Bass, Clements and Kazman (2003)

High-level (architecture)

  • Form, structure, organization, communication
  • Decomposition of software into subsystems
  • Major systems and how they're connected
  • Relationship to system (hardware) architecture
  • Must be able to support desired features

Low-level (modeling)

  • Modules and components
  • Classes, interfaces, public functions
  • Database tables, relations
  • Dynamic behavior
The structure of a software system matters!
Messy graph
Dependency graph

Viewing Architecture

Figures from: Software Modeling & Design, by Hassan Gomaa (2011)

Static (Component) View

Software Modeling & Design, by Hassan Gomaa ©2011

Dynamic View

Deployment View

Architecture Design Patterns

Layers of Abstraction Pattern

infocellar.com

Client/Server Design Pattern

Multiple-Client / Multiple-Server Design Pattern

Multi-tier Client/Server Design Pattern

3-Tier Design Pattern

N-Tier “Application”

“N-tier data applications are data applications that are separated into multiple tiers. Also called “distributed applications” and “multitier applications,” n-tier applications separate processing into discrete tiers that are distributed between the client and the server. When you develop applications that access data, you should have a clear separation between the various tiers that make up the application.”

Microsoft MSDN

ASP.NET MVC

ASP.NET MVC

Service-Oriented Architectures (SOA)

“a distributed software architecture that consists of multiple autonomous services. The services are distributed such that they can execute on different nodes with different service providers. With a SOA, the goal is to develop software applications that are composed of distributed services, such that individual services can execute on different platforms and be implemented in different languages. Standard protocols are provided to allow services to communicate with each other and to exchange information. In order to allow applications to discover and communicate with services, each service has a service description, The service description defines the name of the service, the location of the service, and its data exchange requirements”

Software Modeling & Design, by Hassan Gomaa Ch. 16

SOA

Service Oriented Architecture diagram example

Microservices Architecture

Microservices architecture comparison

Concurrent and Real-Time Architectures

“Real-time software architectures are concurrent architectures that usually have to deal with multiple streams of input events. They are typically state-dependent, with either centralized or decentralized control. Thus, the design of finite state machines, state-dependent interaction modeling, and control patterns are very important in the design of real-time software architectures.” I/O, Concurrency issues play a major role.

Software Modeling & Design, by Hassan Gomaa Ch. 18

Real-time Control System

Real time control system diagram

Peer-to-Peer (P2P)

Architecture drawing of bittorrent

Monolithic

Diagram of Linux kernel

A Developers View

ntier.scad

Software Architecture, Design & Modeling

The Language of Modeling

Test Yourself

Write C# code that minimally implements this:

A UML Class diagram

Test Yourself

Draw a class diagram for this code:

C# code snippet

All software engineers should be able to read UML, especially Class Diagrams.

You should be able to draw UML class diagrams starting from code and vice versa, to write code if given a class diagram

Design Patterns

See "DesignPatterns.pdf" slides on main class page