Learning Resources
This module is populated from the local chunked books in library/raw/semester-07-architecture-ddd/books and a small set of vetted external references. Use this page as a source map, not as an instruction to read everything.
Source Stack
| Book | Role | How to use it in this module |
|---|---|---|
| Learning Domain-Driven Design (Vlad Khononov, 2021) | Primary teaching source | Default escalation for every strategic and tactical concept in this module |
| Fundamentals of Software Architecture (Richards & Ford) | Selective support | Service boundaries, event-driven architecture style, monolith vs distributed trade-offs |
| Clean Architecture (Robert C. Martin) | Selective support | Boundary discipline between layers; component principles for applying aggregates/repositories |
| API Design Patterns (JJ Geewax) | Optional cross-reference | Published-language contracts and cross-context integration |
| Just Enough Software Architecture (Fairbanks) | Peripheral | Architecture description vocabulary |
Resource Map by Cluster
Cluster 1: Strategic Design Foundations
| Need | Best local chunk | Why |
|---|---|---|
| business domain vs subdomain | Khononov: What is a business domain, types of subdomains | Opens the three-level split |
| comparing subdomains | Khononov: Comparing subdomains | Core / supporting / generic distinctions with examples |
| identifying subdomain boundaries | Khononov: Identifying subdomain boundaries to Gigmaster | How boundaries are discovered in practice |
| BusVNext case study | Khononov: BusVNext to Exercises | First worked example of strategic classification |
| business problem scenarios | Khononov: Business problems to scenarios | Strategic prompts to practice on |
| ubiquitous language, consistency, tools | Khononov: Consistency to tools | The language discipline Cluster 1 concept 3 rests on |
| language challenges | Khononov: Challenges to exercises | When language discipline breaks |
| inconsistent models -> scope of a bounded context | Khononov: Inconsistent models to scope | Bridges Cluster 1 concept 3 into Cluster 2 |
| bounded contexts vs subdomains | Khononov: Bounded contexts vs subdomains to science | Clears up the common confusion |
| refrigerator-buying metaphor | Khononov: Buying a refrigerator to exercises | Memorable illustration of context-specific language |
Cluster 2: Context Mapping
| Need | Best local chunk | Why |
|---|---|---|
| cooperation -> conformist | Khononov: Cooperation to conformist | Partnership, Shared Kernel, Customer-Supplier, Conformist |
| ACL, OHS, Published Language, Separate Ways | Khononov: Anticorruption layer to exercises | The translation patterns |
| model translation mechanics | Khononov: Model translation to stateful model translation | Deeper look at how ACLs and OHS are implemented |
| customer-supplier mechanics | Khononov: Customer-supplier to separate | Extra detail on customer-supplier and separate ways |
Cluster 3: Discovering the Domain
| Need | Best local chunk | Why |
|---|---|---|
| what EventStorming is, steps 1-6 | Khononov: What is EventStorming to step 6 policies | The workshop format |
| steps 7+ and wrap-up | Khononov: Step 7 read models to exercises | Read models, aggregates, hot-spots |
| strategic analysis and modernization | Khononov: Strategic analysis to modernization strategy | Finding boundaries in legacy systems |
| strategic modernization and pragmatic DDD | Khononov: Strategic modernization to pragmatic DDD | Pragmatic notes on evolving boundaries |
| evolving boundaries | Khononov: Changes in domains to tactical design concerns | Subdomain reclassification, context evolution |
Cluster 4: Tactical Building Blocks
| Need | Best local chunk | Why |
|---|---|---|
| building blocks overview | Khononov: History to building blocks part 1 | Entities, VOs |
| building blocks part 2 | Khononov: Building blocks part 2 | Aggregates, invariants |
| building blocks part 3 | Khononov: Building blocks part 3 | Domain events, repositories |
| building blocks part 4 | Khononov: Building blocks part 4 to exercises | Factories, application layer |
| business logic vs architectural patterns | Khononov: Business logic vs architectural patterns | Where logic belongs, not where frameworks put it |
| layered architecture for DDD | Khononov: When to use layered architecture to implementation | Application/domain/infrastructure layering |
| projecting read models | Khononov: Projecting read models to exercises | Bridge from aggregates to CQRS in Cluster 5 |
| integrating aggregates and outbox | Khononov: Integrating aggregates and outbox | Domain-events-across-aggregates mechanics |
| saga coordination | Khononov: Saga to exercises | Coordinating multi-aggregate operations |
Cluster 5: DDD in Practice
| Need | Best local chunk | Why |
|---|---|---|
| event sourcing foundations | Khononov: Event sourcing | What ES is |
| event-sourced domain model | Khononov: Search to event-sourced domain model | How it plays with aggregates |
| advantages and trade-offs | Khononov: Advantages to exercises | Decision framing for ES |
| event-driven architecture structure | Khononov: Event-driven architecture to structure | Context-level event architecture |
| types of events | Khononov: Types of events to distributed big ball of mud | Domain vs integration vs event-carried state transfer |
| temporal coupling | Khononov: Temporal coupling to exercises | Why raw domain events shouldn't cross contexts |
| analytical vs transactional data | Khononov: Analytical data model vs transactional data model | Data-mesh-adjacent framing of CQRS |
| data warehouse to data mesh | Khononov: Data warehouse to data mesh | Bounded-context-aware analytics |
| decompose data around domains | Khononov: Decompose data around domains to exercises | Data ownership across contexts |
| microservices as deep services | Khononov: Microservices as deep services to aggregates | Architecture-to-context alignment |
| services and system complexity | Khononov: What is a service to system complexity | Services and their boundaries |
Canonical External References
Visit these occasionally for vocabulary, deeper examples, and community heuristics.
Primary sites
- Eric Evans - Domain Language -- the original DDD source; the free DDD Reference PDF is the canonical glossary.
- Eric Evans - DDD Reference (PDF, free)
- Vaughn Vernon -- author of Implementing DDD and Effective Aggregate Design.
- DDD Community -- the community hub; case studies and library.
- DDD Heuristics - Wirfs-Brock, Verraes, Baas-Schwegler -- the heuristics library cited in concept 8.
- Nick Tune - Strategy Blog -- strategic design case studies.
- EventStorming - Alberto Brandolini -- the official source on the technique.
Adjacent / practice
- Context Mapper -- open-source DSL and tool for DDD context maps, domain message flow modelling.
- Team Topologies -- organization design that aligns with contexts (Skelton & Pais).
- Martin Fowler - DDD Aggregate
- Martin Fowler - Domain Event
- Chris Richardson - Transactional Outbox
- Greg Young - CQRS documents (PDF)
Books (beyond what's in the local stack)
- Implementing Domain-Driven Design (Vaughn Vernon, 2013) -- for deep tactical practice with aggregates, repositories, and domain events.
- Domain-Driven Design: Tackling Complexity in the Heart of Software (Eric Evans, 2003) -- "the blue book"; the original.
- Domain-Driven Design Distilled (Vaughn Vernon, 2016) -- concise strategic overview.
- Monolith to Microservices (Sam Newman, 2019) -- pairs well with Cluster 5 alignment decisions.
- Designing Data-Intensive Applications (Martin Kleppmann, 2017) -- necessary background for CQRS and event sourcing.
Videos
- Eric Evans: What I've Learned About DDD Since the Book (DDD Europe)
- Alberto Brandolini: 50,000 Orange Stickies Later (EventStorming)
- Greg Young: CQRS and Event Sourcing (Code on the Beach)
- Vaughn Vernon: Effective Aggregate Design (DDD Europe)
How To Use This Page
- For a single concept: find its cluster table, pick one chunk, stop there.
- For a cluster: read the 3-5 chunks mapped to it, then do the cluster practice page.
- For the whole module: do not read front-to-back; follow the module's suggested weekly flow, pulling chunks as needed.
- Keep a 1-line note per chunk ("what I learned, what I will try") -- your future self is the primary consumer of this log.