This page organizes different types of patterns and approaches in software development.
Design Patterns
Design Patterns - Specific, reusable solutions to commonly occurring problems in software design
Classic Patterns:
- Strategy pattern - Encapsulate algorithms and make them interchangeable
- Observer pattern - Define one-to-many dependencies for automatic notification
- GRASP patterns - General Responsibility Assignment Software Patterns for object-oriented design
Architectural Patterns
Architectural Patterns - High-level structural approaches for organizing applications
Key Patterns:
- Functional Core, Imperative Shell - Separate pure logic from side effects
Design Principles
Design Principles - Prescriptive guidelines for structuring code
Separation Principles:
- Command Query Separation - Separate commands from queries
Design Concepts
Design Concepts - Theoretical foundations that explain why patterns and principles work
Control Flow:
- Inversion of Control - Framework-controlled flow vs traditional control
Programming Paradigms
Functional Programming
Monads - managing side effects in functional programming
Foundational Resources: