Deep Dive: Domain-Driven Design

Dive deeper into your Domain-Driven Design journey

About This Course

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:40 Free preview
What will you learn in this course?
02:07 Free preview
Who is the course for and prerequisites
02:31 Free 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
03:19
Converting Aggregate Design To Code
02:32
Section Recap
01:10
Course Conclusion
01:31

Meet Your Instructor

Amichai Mantinband

Amichai Mantinband

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.

View all courses by Amichai Mantinband

What's New

Getting Started: Building .NET Applications on AWS
course

Getting Started: Building .NET Applications on AWS

Learn how to build and deploy .NET applications on AWS using CDK, Lambda, DynamoDB, S3, and more.

Learn More
What's new in C# 14
blog

What's new in C# 14

This guide covers every new C# 14 feature, explains its benefits, and provides practical code examples to help you navigate how you can use them.

Learn More
Let's Build It: AI Chatbot with RAG in .NET Using Your Data
course

Let's Build It: AI Chatbot with RAG in .NET Using Your Data

Build a Retrieval-Augmented Generation (RAG) chatbot that can answer questions using your data.

Learn More
From Zero to Hero: SignalR in .NET
course

From Zero to Hero: SignalR in .NET

Enable enterprise-grade real-time communication for your web apps with SignalR.

Learn More
Deep Dive: Solution Architecture
course

Deep Dive: Solution Architecture

Master solution architecture and turn business needs into scalable, maintainable systems.

Learn More
Migrating: ASP.NET Web APIs to ASP.NET Core
course

Migrating: ASP.NET Web APIs to ASP.NET Core

A step-by-step process to migrate ASP.NET Web APIs from .NET Framework to ASP.NET Core.

Learn More
Getting Started: Caching in .NET
course

Getting Started: Caching in .NET

Let's make the hardest thing in programming easy for .NET software engineers.

Learn More
From Zero to Hero: Testing with xUnit in C#
course

From Zero to Hero: Testing with xUnit in C#

Learn how to test any codebase in .NET with the latest version of xUnit, the industry-standard testing library.

Learn More
Create a ChatGPT Console AI Chatbot in C#
blog

Create a ChatGPT Console AI Chatbot in C#

This walkthrough is your hands-on entry point to create a basic C# console application that talks to ChatGPT using the OpenAI API.

Learn More