Domain-driven design (or DDD for short) is one of the most popular software design
approaches and for excellent reason. It allows us to build highly maintainable systems
using domain-specific expertise and base our implementation on well-developed models
using ubiquitous language. In this course, Amichai Mantinband will expand on his existing
Getting Started course knowledge and dive deeper into advanced DDD concepts such as
event storming, sub-domains, bounded contexts, context mapping, aggregate design and
more. Join Amichai in this 6-hour course and get ahead of the curve on your DDD journey.
Course Curriculum
5h 41m 11 sections
Welcome
02:40Free preview
What will you learn in this course?
02:07Free preview
Who is the course for and prerequisites
02:31Free preview
Designing Systems Following Domain-Driven Design
08:08
Key Strategic and Tactical Practices
03:44
Domain Discovery
02:32
Domain Discovery Techniques
08:11
Event Storming Sneak Peek
02:27
Documenting Ubiquitous Language
04:16
Documenting Invariants
03:25
Section Recap
01:28
What is Event Storming?
03:07
Event Storming Legend
07:00
Types of Event Storming
02:53
Big Picture Event Storming
05:29
Gym Session Scheduling System Domain Overview
05:22
Big Picture Event Storming In Action - Setup
05:18
Round 1 - Chaotic Exploration
13:24
Round 2 - Enforce the Timeline
15:59
Round 3 - People & Systems
05:10
Round 4 - Walkthrough & Reverse Narrative
05:22
Round 5 - Arrow Voting
01:18
Big Picture Event Storming Goals
01:51
Section Recap
01:47
What is Process Modeling Event Storming?
04:28
Process Modeling - The Rules of the Game
01:29
Process Modeling in Action - Setup
02:09
Round 1 - Framing the Problem
02:00
Round 2 - Rush to the Goal
13:24
Round 3 - Fill in the Blanks
08:22
Process Modeling Event Storming Goals
01:13
Section Recap
01:00
Refresher - What are Domains & Sub-Domains
04:56
Identifying Sub-Domains
08:34
Classifying Sub-Domains
03:09
Section Recap
01:29
Refresher - What are Bounded Contexts
06:59
Reviewing Our Ubiquitous Language
04:28
Reviewing Our Invariants
02:38
Reviewing Our Sub-Domains
03:46
How Bounded Contexts Affect Domain Models
01:56
Defining Bounded Contexts
03:45
Defining Our Bounded Contexts
06:34
Section Recap
00:34
Refresher - What is Context Mapping
02:53
Team Relationships
03:57
Context Map Patterns
10:44
Context Mapping In Action - Setup & Context
03:36
Creating an Admin Profile
08:58
Creating a Subscription
02:21
Creating a Gym
02:35
Creating a Room
02:32
Creating a Session
03:09
Creating a Participant Profile
01:21
Reserving a Spot in a Session
01:04
Context Mapping In Action - Conclusion
01:11
Strategic Goals Alignment
02:36
Section Recap
00:37
Refresher - What is the Tactical Phase
01:35
Refresher - Tactical Patterns
07:20
Tactical Phase Objectives
03:47
Section Recap
00:32
Enforce Invariants
00:46
Reference Aggregates By Id
00:19
Update Aggregate via Aggregate Root
00:14
Prefer Smaller Aggregates
01:44
One Aggregate Per Transaction
01:59
Use Eventual Consistency Outside the Boundary
02:56
Maintain Aggregate Scope
00:30
Aggregate Root Identity Uniqueness
00:18
Private > Public
00:36
Assess and Refactor
00:20
Aggregate Design Steps
06:06
Aggregate Design In Action - Step 1
02:06
Aggregate Design In Action - Step 2
05:56
Aggregate Design In Action - Step 3
02:04
Aggregate Design In Action - Step 4 Setup
02:02
Merging Aggregates in the User Management Context
05:43
Merging Aggregates in the Gym Management Context
10:41
Merging Aggregates in the Session Management Context - The Chain Effect of Merging Aggregates
04:05
Merging Aggregates in the Session Management Context - Identifying Missing Domain Objects
06:01
Merging Aggregates in the Session Management Context Continued
02:23
Merging Aggregates in the Session Management Context - Propagating Data Across Bounded Contexts
03:49
Merging Aggregates Across Bounded Contexts
04:50
Merging Aggregates in the Session Management Context - Continued
01:57
Aggregate Design Draft Reflection
04:29
Merging Aggregates Based On Eventual Consistency Constraints
01:12
Evolving Aggregate Design With Time or Refactoring Existing Aggregate Designs
Amichai Mantinband is a Software Engineer at Microsoft and a .NET content creator. He works on large-scale, distributed systems within Microsoft Office, serving over 100 million daily users. He is a speaker at official .NET conferences, and within Microsoft, he authors and teaches software architecture courses. Amichai is the author of NuGet packages ErrorOr & Throw and has a .NET programming YouTube channel covering advanced topics such as design patterns, architecture, and best practices.