Until January 2nd 2025, when you have more than one item in your basket, the cheapest one is FREE! Up to 3 orders per student. Happy Holidays!

Deep Dive: Domain-Driven Design

Dive deeper into your Domain-Driven Design journey

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.

Curriculum

Welcome (2:40)

What will you learn in this course? (2:07)

Who is the course for and prerequisites (2:31)

Designing Systems Following Domain-Driven Design (2:06)

Key Strategic and Tactical Practices (3:49)

Domain Discovery (4:50)

Domain Discovery Techniques (1:57)

Event Storming Sneak Peek (4:29)

Documenting Ubiquitous Language (1:12)

Documenting Invariants (3:19)

Section Recap (2:32)

What is Event Storming? (1:10)

Event Storming Legend (5:56)

Types of Event Storming (2:04)

Big Picture Event Storming (2:02)

Gym Session Scheduling System Domain Overview (5:43)

Big Picture Event Storming In Action - Setup (10:41)

Round 1 - Chaotic Exploration (4:05)

Round 2 - Enforce the Timeline (6:01)

Round 3 - People & Systems (2:23)

Round 4 - Walkthrough & Reverse Narrative (1:31)

Round 5 - Arrow Voting (8:08)

Big Picture Event Storming Goals (3:44)

Section Recap (2:32)

What is Process Modeling Event Storming? (8:11)

Process Modeling - The Rules of the Game (2:27)

Process Modeling in Action - Setup (4:16)

Round 1 - Framing the Problem (3:25)

Round 2 - Rush to the Goal (1:28)

Round 3 - Fill in the Blanks (3:07)

Process Modeling Event Storming Goals (5:22)

Section Recap (1:18)

Refresher - What are Domains & Sub-Domains (1:51)

Identifying Sub-Domains (1:47)

Classifying Sub-Domains (7:00)

Section Recap (2:53)

Refresher - What are Bounded Contexts (5:29)

Reviewing Our Ubiquitous Language (5:23)

Reviewing Our Invariants (5:18)

Reviewing Our Sub-Domains (13:24)

How Bounded Contexts Affect Domain Models (15:59)

Defining Bounded Contexts (5:10)

Defining Our Bounded Contexts (4:28)

Section Recap (1:29)

Refresher - What is Context Mapping (2:09)

Team Relationships (2:00)

Context Map Patterns (13:24)

Context Mapping In Action - Setup & Context (8:22)

Creating an Admin Profile (1:13)

Creating a Subscription (1:00)

Creating a Gym (4:56)

Creating a Room (8:34)

Creating a Session (3:09)

Creating a Participant Profile (1:29)

Reserving a Spot in a Session (6:59)

Context Mapping In Action - Conclusion (4:28)

Strategic Goals Alignment (2:38)

Section Recap (3:46)

Refresher - What is the Tactical Phase (1:56)

Refresher - Tactical Patterns (3:45)

Tactical Phase Objectives (6:34)

Section Recap (0:34)

Enforce Invariants (2:53)

Reference Aggregates By Id (1:21)

Update Aggregate via Aggregate Root (1:04)

Prefer Smaller Aggregates (1:11)

One Aggregate Per Transaction (2:36)

Use Eventual Consistency Outside the Boundary (0:37)

Maintain Aggregate Scope (3:57)

Aggregate Root Identity Uniqueness (10:45)

Private > Public (3:36)

Assess and Refactor (8:58)

Aggregate Design Steps (2:21)

Aggregate Design In Action - Step 1 (2:35)

Aggregate Design In Action - Step 2 (2:32)

Aggregate Design In Action - Step 3 (3:09)

Aggregate Design In Action - Step 4 Setup (1:35)

Merging Aggregates in the User Management Context (7:20)

Merging Aggregates in the Gym Management Context (3:47)

Merging Aggregates in the Session Management Context - The Chain Effect of Merging Aggregates (0:32)

Merging Aggregates in the Session Management Context - Identifying Missing Domain Objects (0:46)

Merging Aggregates in the Session Management Context Continued (0:21)

Merging Aggregates in the Session Management Context - Propagating Data Across Bounded Contexts (6:06)

Merging Aggregates Across Bounded Contexts (0:19)

Merging Aggregates in the Session Management Context - Continued (0:14)

Aggregate Design Draft Reflection (1:44)

Merging Aggregates Based On Eventual Consistency Constraints (1:59)

Evolving Aggregate Design With Time or Refactoring Existing Aggregate Designs (2:56)

Converting Aggregate Design To Code (0:30)

Section Recap (0:18)

Course Conclusion (0:36)

Course Info

Level:
Deep Dive
Duration:
5h 41m
Rating (1,9K+):
star

Lifetime access

Add to Cart

Part of the bundle

From Zero to Hero: Domain-Driven Design Bundle thumbnail Get it for 20% off
Dometrain Pro

Want access to all of our courses? Subscribe to Dometrain Pro!

Try it for free!

About the Author

author_img

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.

More courses by Amichai Mantinband