Software Engineering

  1. Software Architecture
    1. Layered Architecture
      1. Definition and Principles
        1. Segregation of functionality into distinct layers
          1. Inter-layer communication protocols
          2. Common Layers
            1. Presentation Layer
              1. Business Logic Layer
                1. Data Access Layer
                  1. Database Layer
                  2. Advantages
                    1. Separation of concerns
                      1. Ease of maintenance and testing
                      2. Disadvantages
                        1. Potential performance overhead
                          1. Complexity in large systems
                          2. Use Cases
                            1. Enterprise applications
                              1. Multi-tier web applications
                            2. Client-Server Architecture
                              1. Definition and Principles
                                1. Centralized server resources with multiple client nodes
                                  1. Client-server communication protocols (e.g., HTTP, TCP/IP)
                                  2. Client Types
                                    1. Thin Clients
                                      1. Thick Clients
                                      2. Server Considerations
                                        1. Load balancing
                                          1. Redundancy and Failover Mechanisms
                                          2. Advantages
                                            1. Centralized resource control
                                              1. Scalability through load management
                                              2. Disadvantages
                                                1. Single point of failure
                                                  1. Network dependency
                                                  2. Use Cases
                                                    1. Web applications
                                                      1. Networked applications
                                                    2. Microservices Architecture
                                                      1. Definition and Principles
                                                        1. Independently deployable services
                                                          1. Decentralized data management
                                                            1. Domain-driven design
                                                            2. Service Characteristics
                                                              1. Scalability and Flexibility
                                                                1. Fault Isolation
                                                                2. Communication Strategies
                                                                  1. REST APIs
                                                                    1. Message Brokers (e.g., RabbitMQ, Kafka)
                                                                    2. Advantages
                                                                      1. Improved scalability
                                                                        1. Faster Time-to-market
                                                                        2. Disadvantages
                                                                          1. Increased complexity in communication
                                                                            1. Challenges in data consistency
                                                                            2. Use Cases
                                                                              1. Large-scale applications
                                                                                1. Continuous deployment environments
                                                                              2. Service-Oriented Architecture (SOA)
                                                                                1. Definition and Principles
                                                                                  1. Reusability of service components
                                                                                    1. Loose coupling between services
                                                                                    2. Core Components
                                                                                      1. Services
                                                                                        1. Service Contract
                                                                                          1. Service Interface
                                                                                          2. Protocols and Standards
                                                                                            1. SOAP
                                                                                              1. WSDL
                                                                                              2. Advantages
                                                                                                1. Enhanced integration capabilities
                                                                                                  1. Platform independence
                                                                                                  2. Disadvantages
                                                                                                    1. Complexity in implementing service contracts
                                                                                                      1. Performance overhead
                                                                                                      2. Use Cases
                                                                                                        1. Enterprise business applications
                                                                                                          1. Cross-organizational data integration
                                                                                                        2. Event-Driven Architecture
                                                                                                          1. Definition and Principles
                                                                                                            1. Asynchronous communication via events
                                                                                                              1. Decoupling message producers and consumers
                                                                                                              2. Key Components
                                                                                                                1. Event Producers
                                                                                                                  1. Event Consumers
                                                                                                                    1. Event Bus
                                                                                                                    2. Types of Event-driven Models
                                                                                                                      1. Event Notification
                                                                                                                        1. Event-carried State Transfer
                                                                                                                        2. Advantages
                                                                                                                          1. Real-time processing
                                                                                                                            1. Flexibility and scalability
                                                                                                                            2. Disadvantages
                                                                                                                              1. Complexity in managing event flows
                                                                                                                                1. Challenges in event sequencing
                                                                                                                                2. Use Cases
                                                                                                                                  1. Real-time data analytics
                                                                                                                                    1. IoT systems
                                                                                                                                  2. Model-View-Controller (MVC)
                                                                                                                                    1. Definition and Structure
                                                                                                                                      1. Separation of application logic into Model, View, and Controller
                                                                                                                                        1. Communication flow between components
                                                                                                                                        2. Detailed Roles
                                                                                                                                          1. Model: Data and Business Logic
                                                                                                                                            1. View: User Interface
                                                                                                                                              1. Controller: Request Handling
                                                                                                                                              2. Advantages
                                                                                                                                                1. Clear separation of concerns
                                                                                                                                                  1. Independent component development
                                                                                                                                                  2. Disadvantages
                                                                                                                                                    1. Coordinating interactions can be complex
                                                                                                                                                      1. Potential for tight coupling between Controller and View
                                                                                                                                                      2. Use Cases
                                                                                                                                                        1. Web applications
                                                                                                                                                          1. Desktop GUI applications
                                                                                                                                                        2. Serverless Architecture
                                                                                                                                                          1. Definition and Principles
                                                                                                                                                            1. Running applications without managing the infrastructure
                                                                                                                                                              1. Pay-as-you-use billing model
                                                                                                                                                              2. Key Concepts
                                                                                                                                                                1. Function as a Service (FaaS)
                                                                                                                                                                  1. Event-driven executions
                                                                                                                                                                  2. Advantages
                                                                                                                                                                    1. Reduced operational costs
                                                                                                                                                                      1. Scalability
                                                                                                                                                                      2. Disadvantages
                                                                                                                                                                        1. Vendor lock-in
                                                                                                                                                                          1. Cold start latency
                                                                                                                                                                          2. Use Cases
                                                                                                                                                                            1. Event-triggered applications
                                                                                                                                                                              1. Microservices architecture
                                                                                                                                                                            2. Monolithic Architecture
                                                                                                                                                                              1. Definition and Characteristics
                                                                                                                                                                                1. Single, unified codebase
                                                                                                                                                                                  1. Deployment as a single unit
                                                                                                                                                                                  2. Considerations
                                                                                                                                                                                    1. Resource Sharing
                                                                                                                                                                                      1. Consistent updates and deployments
                                                                                                                                                                                      2. Advantages
                                                                                                                                                                                        1. Simplicity in development and testing
                                                                                                                                                                                          1. Easy deployment
                                                                                                                                                                                          2. Disadvantages
                                                                                                                                                                                            1. Lack of scalability at component level
                                                                                                                                                                                              1. Challenges in modifying a single module
                                                                                                                                                                                              2. Use Cases
                                                                                                                                                                                                1. Smaller applications
                                                                                                                                                                                                  1. Applications with tightly coupled components