Software Design and Architecture Roadmap¶
- Roadmap: https://roadmap.sh/software-design-architecture
1. Clean Code Principles¶
- 1.1 Be consistent
- 1.2 Meaningful names over comments
- 1.3 Indentation and Code Style
- 1.4 Keep methods / classes / files small
- 1.5 Pure functions
- 1.6 Minimize cyclomatic complexity
- 1.7 Avoid passing nulls, booleans
- 1.8 Keep framework code distant
- 1.9 Use correct constructs
- 1.10 Tests should be fast and independent
- 1.11 Organize code by actor it belongs to
- 1.12 Command query separation
- 1.13 Keep it simple and refactor often
2. Programming Paradigms¶
- 2.1 Structured Programming
- 2.2 Functional Programming
- 2.3 Object Oriented Programming
3. Object Oriented Programming¶
3.1 Primary Principles¶
- 3.1.1 Inheritance
- 3.1.2 Polymorphism
- 3.1.3 Abstraction
- 3.1.4 Encapsulation
3.2 Paradigm Features¶
- 3.2.1 Abstract Classes
- 3.2.2 Concrete Classes
- 3.2.3 Scope / Visibility
- 3.2.4 Interfaces
4. Design Principles¶
- 4.1 SOLID
- 4.2 DRY
- 4.3 YAGNI
- 4.4 Law of Demeter
- 4.5 Tell, don't ask
- 4.6 Hollywood Principle
- 4.7 Composition over Inheritance
- 4.8 Encapsulate what varies
- 4.9 Program against abstractions
5. Design Patterns¶
- 5.1 GoF Design Patterns
- 5.2 PoSA Patterns
6. Architectural Principles¶
- 6.1 Component Principles
- 6.2 Policy vs Detail
- 6.3 Coupling and Cohesion
- 6.4 Boundaries
7. Architectural Styles¶
- 7.1 Event-Driven
- 7.2 Publish-Subscribe
- 7.3 Messaging
- 7.4 Client-Server
- 7.5 Peer-to-Peer
- 7.6 Distributed
7.7 Component-Based¶
- 7.7.1 Monolithic
- 7.7.2 Layered
7.8 Structural¶
8. Architectural Patterns¶
- 8.1 Domain-Driven Design
- 8.2 Model-View Controller
- 8.3 Microservices
- 8.4 Blackboard Pattern
- 8.5 Microkernel
- 8.6 Serverless Architecture
- 8.7 Message Queues / Streams
- 8.8 Event Sourcing
- 8.9 SOA
- 8.10 CQRS
9. Enterprise Patterns¶
- 9.1 DTOs
- 9.2 Identity Maps
- 9.3 Usecases
- 9.4 Repositories
- 9.5 Mappers
- 9.6 Transaction Script
- 9.7 Commands / Queries
- 9.8 Value Objects
- 9.9 Domain Models
- 9.10 Entities
- 9.11 ORMs
10. Model-Driven Design¶
- 10.1 Domain Models
- 10.2 Anemic Models
- 10.3 Domain Language
- 10.4 Class Variants
- 10.5 Layered Architectures