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:

Design Concepts

Design Concepts - Theoretical foundations that explain why patterns and principles work

Control Flow:

Programming Paradigms

Functional Programming

Monads - managing side effects in functional programming

Foundational Resources:

See Also