Page 1 of 1

Software Architecture and Design Patterns

Posted: Tue Jan 14, 2025 5:23 pm
by Buela_Vigneswaran
Software Architecture and Design Patterns

1. Software Architecture
  • Definition: The high-level structure of a software system, defining its components and their interactions.
  • Key Concepts:
    • Architectural styles (e.g., Client-Server, Microservices, Event-Driven, Service-Oriented Architecture [SOA], Layered Architecture).
    • Non-functional requirements: Scalability, Reliability, Security, and Maintainability.
    • Middleware and APIs.
2. Common Software Architecture Patterns
  • Monolithic Architecture:
    • Single, unified codebase.
    • Suitable for small to medium-sized applications.
    • Challenges: Difficult to scale and maintain as the system grows.
  • Microservices Architecture:
    • Applications split into small, loosely coupled services.
    • Independent deployment and scalability.
    • Challenges: Network overhead, managing inter-service communication.
  • Event-Driven Architecture:
    • Communication through events.
    • Suitable for real-time systems and asynchronous processes.
    • Examples: Kafka, RabbitMQ.
3. Design Patterns
  • Definition: Reusable solutions to common software design problems.
  • Types of Design Patterns:
    • Creational Patterns:
      • Focus on object creation mechanisms.
      • Examples: Singleton, Factory Method, Abstract Factory, Builder, Prototype.
    • Structural Patterns:
      • Deal with object composition.
      • Examples: Adapter, Bridge, Composite, Decorator, Facade, Proxy.
    • Behavioral Patterns:
      • Focus on object interaction and communication.
      • Examples: Observer, Strategy, Command, State, Iterator, Mediator.
4. Principles of Good Design
  • SOLID Principles:
    • S: Single Responsibility Principle (SRP)
    • O: Open/Closed Principle (OCP)
    • L: Liskov Substitution Principle (LSP)
    • I: Interface Segregation Principle (ISP)
    • D: Dependency Inversion Principle (DIP)
  • DRY (Don’t Repeat Yourself)
  • KISS (Keep It Simple, Stupid)
  • YAGNI (You Aren’t Gonna Need It)
5. UML Diagrams (Unified Modeling Language)
  • Used to represent system designs visually.
  • Examples: Use Case Diagrams, Class Diagrams, Sequence Diagrams, Activity Diagrams.
6. Key Tools for Architecture and Design
  • Modeling Tools: Enterprise Architect, Visual Paradigm.
  • Diagramming Tools: Lucidchart, Draw.io, Microsoft Visio.