DEV Community

Cover image for Software Architecture and Software Design
Franck Mercado
Franck Mercado

Posted on • Edited on

4

Software Architecture and Software Design

Based on both key definitions, software architecture and software design, we can lay down an organization of software principles, methodologies and patterns currently applied in modern software development and technology innovations.

Software Architecture

It's a high level blueprint for a system.
It defines the structural elements like subsystems, roles, relationships and responsibilities meaning it lays down the architecture style, patterns that will guide the software design.
Software architecture directly deals with arranging this elements like servers, databases, APIs, clients or users of the software application, etc in order to fulfill business requirements.

Software Design

Implies decisions at a lower level of detail as it provides an implementation plans for the laid out architecture.
Software designers will decide on the specifications, contracts used in these subsystems that later software engineers will implement.


Organization of software principles, methodologies and patterns

Index of software concepts:

  1. Software architecture style
  2. Software architecture patterns
  3. Software design methodologies
  4. Software design patterns
  5. Programming paradigms
  6. Clean code principles

1. Software Architecture Style

Based on Structure (separation of concerns)

  • Layered architecture (N-tier):Common for separation of concerns (e.g. presentation, business logic, data layers).
  • Hexagonal architecture (Ports & Adapters): Focused in decoupling core logic from external systems.

Based on distribution of the application

  • Monolith architecture
  • Microservices architecture
    • Microservices patterns

Events

Focuses on asynchronous communication through events.

  • Event Driven architecture

Cloud

Involves event triggered functions (AWS Lambda) rather than traditional server management.

  • Serverless architecture

API Design

  • REST over HTTP

2. Software Architecture Patterns

Based on data management

  • Database per service (microservices)
  • Shared database (monoliths)

Event driven systems

  • CQRS: Common Query Responsibility Segregation, Separating read and write operations.
  • Domain event
  • Event sourcing: Store state changes as sequence of events.

Based on transactional messaging

Ensures reliable message delivery in distributed systems.

  • Transactional outbox

Based on security

  • Access tokens (Authentication)
  • Oauth (Authorization)
  • Session

Based on observability

Essential for monitoring and troubleshooting in distributed systems.

  • Log aggregation
  • Application metrics
  • Exception tracking
  • Health check API

3. Software Design Methodologies

  • Domain Driven Design (DDD): Focuses on modeling the domain and aligning software design with business needs.

  • Behavior Driven Development (BDD): emphasizes collaboration between developers, testers and business stakeholders.

  • Test Driven Development (TDD): involves writing tests for core domain logic before coding to ensure quality and maintainability.

4. Software Design Patterns

  • Creational Patterns
  • Structural Patterns
  • Behavioral Patterns

Expand on software design patterns

5. Programming Paradigms

  • Object Oriented Programming (OOP)

    • Composition over inheritance
    • SOLID
      • Single-responsiblity Principle
      • Open-closed Principle
      • Liskov Substitution Principle
      • Interface Segregation Principle
      • Dependency Inversion Principle
  • Functional Programming: emphasizes immutability and pure functions.

6. Basic principles

  • Clean Code
  • DRY: Don't repeat yourself
  • KISS: Keep it stupid simple
  • YAGNI: You aren't going to need it

Take into account that all these architectural principles, methodologies and patterns are no substitute for making your own decisions. You need to balance them according to business requirements of your software application.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (1)

Collapse
 
_2082ca7cc65434467c4fb profile image
袁官东

If you need to design 3D software architecture diagram, you can try iCraft Editor : icraft.gantcloud.com/editor

Some comments may only be visible to logged-in visitors. Sign in to view all comments.

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay