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.
- 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.
- 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.
- Creational Patterns:
- 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)
- Used to represent system designs visually.
- Examples: Use Case Diagrams, Class Diagrams, Sequence Diagrams, Activity Diagrams.
- Modeling Tools: Enterprise Architect, Visual Paradigm.
- Diagramming Tools: Lucidchart, Draw.io, Microsoft Visio.