30% OFF - Use code HANDSON30 for 30% off any course or Dometrain Pro! Browse courses →
  • Courses
  • Learning Paths
  • Blogs
  • Authors
  • Leaderboard
  • Dometrain Pro
  • Shopping Basket

    Your basket is empty

  • Business Portal
  • Getting Started: Domain-Driven Design

    Learn the fundamentals of Domain-Driven Design (DDD) with practical examples in this course. Explore complex domains, strategic patterns, and tactical design to create well-aligned systems!

    About This Course

    Domain-Driven Design (or DDD for short) is one of the most popular approaches to software development, and that's for a very good reason. As described excellently by Martin Fowler, it "is an approach to software development that centres the development on programming a domain model with a rich understanding of the processes and rules of a domain". Building software that way, especially when dealing with a complex domain, leads to aligned business people and developers and better software that does precisely what the business needs. Ever since its formal definition by Eric Evans all the way back in 2003, developers have used it to create software based on a well-developed model of design. In this Getting Started course, Amichai Mantinband will break down Domain-Driven Design into a very easily digestible concept using his real-world experience.

    Course Curriculum

    5h 12m 11 sections
    Welcome
    01:11 Free preview
    What will you learn in this course?
    02:13 Free preview
    Who is the course for and prerequisites
    03:10 Free preview
    What is Domain-Driven Design?
    01:27
    What is a Domain?
    04:26
    Why you should learn and practice DDD
    02:19
    The two parts of DDD
    04:56
    Section Recap
    01:47
    The domain we’ll be exploring
    06:06
    The domain’s Ubiquitous Language
    04:30
    Ubiquitous Language as a tool for detecting Domain Objects
    03:41
    The domain’s invariants
    03:00
    Enforcing invariants
    02:44
    Creating the domain objects
    05:20
    Invariants as Unit Tests
    10:41
    Enforcing Invariants that rely on dependencies
    12:22
    The Result Pattern
    10:08
    Section Recap
    02:10
    What are Tactical Patterns?
    03:15
    What is Tactical Design?
    03:33
    Entities
    03:49
    Implementing the Entity base class
    02:23
    Value Objects
    07:29
    Implementing the Value Object base class
    02:39
    Aggregates
    06:02
    Shifting the focus to Aggregates
    06:16
    Implementing the Aggregate base class
    01:09
    Structuring the Domain Layer around Aggregates
    08:34
    Domain Services
    05:32
    Factories
    03:34
    Implementing a Static Factory Method
    05:05
    Repositories
    04:40
    Disconnected Domain Models
    01:40
    Repositories and EF Core
    03:18
    Implementing a Repository
    03:14
    Section Recap
    01:16
    Accessing the Domain Layer via a web API
    04:49
    A system without Domain Events
    06:45
    Eventual Consistency
    01:15
    What is a Domain Event?
    05:27
    The Domain Event Sausage Factory
    06:43
    Implementing a Domain Event
    06:41
    Section Recap
    01:23
    Domain Modeling & Analysis Paralysis
    01:41
    Domain Model Identity Uniqueness
    02:28
    Domain Object Deletion
    03:38
    One Aggregate Per Transaction
    03:21
    Reference Between Domain Models
    03:43
    Section Recap
    00:55
    Application Services vs Domain Services
    05:11
    Transactional vs. Eventual Consistency
    05:08
    Rich vs. Anemic Domain Models
    03:57
    Always Valid vs. Not Always Valid
    02:32
    Persistence Ignorance
    01:08
    Section Recap
    01:19
    What is Strategic Design?
    04:41
    Sub-Domains
    03:30
    The 3 types of Sub-Domains
    03:40
    Context Mapping and Context Maps
    04:14
    Context Map example
    04:43
    Team Relationships
    01:44
    Context Map Patterns
    03:07
    Section Recap
    01:18
    Bounded Contexts
    05:29
    Bounded Contexts vs. Sub-Domains (Problem vs. Solution Space)
    05:17
    Exploring our Domain’s Bounded Contexts
    04:06
    Exploring relationships between our Bounded Contexts
    06:10
    Defining our Context Map
    05:00
    Section Recap
    01:09
    What are Integration Events?
    02:46
    The chain of Integration and Domain Events
    04:21
    Using a Message Broker for distributing Integration Events
    04:29
    Error handling when publishing Integration Events
    03:56
    The Outbox Pattern
    04:25
    The Integration Events Sausage Factory - Outbox Writer
    04:18
    The Integration Events Sausage Factory - Integration Event Publisher
    01:56
    The Integration Events Sausage Factory - Consuming Integration Events
    05:17
    Section Recap
    00:45
    Course conclusion
    01:30

    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: Model Context Protocol (MCP)
    course

    Getting Started: Model Context Protocol (MCP)

    Learn how to get started with the Model Context Protocol (MCP) and integrate it into your applications.

    Learn more about Getting Started: Model Context Protocol (MCP)
    Hands-On: Learn TypeScript
    course

    Hands-On: Learn TypeScript

    Learn TypeScript through hands-on coding exercises. Practice what you learn with interactive challenges designed for every level.

    Learn more about Hands-On: Learn TypeScript
    Hands-On: Learn JavaScript
    course

    Hands-On: Learn JavaScript

    Learn JavaScript through hands-on coding exercises. Practice what you learn with interactive challenges designed for every level.

    Learn more about Hands-On: Learn JavaScript
    Hands-On: Data Structures & Algorithms in C#
    course

    Hands-On: Data Structures & Algorithms in C#

    Master data structures and algorithms through hands-on coding exercises in C#. Free to enroll for 7 days!

    Learn more about Hands-On: Data Structures & Algorithms in C#
    Blogsmith.ai
    feature

    Blogsmith.ai

    Turn your videos into blogs and newsletters with AI. Check out our new product at blogsmith.ai.

    Learn more about Blogsmith.ai
    Leaderboard
    feature

    Leaderboard

    See how you stack up against other learners. Track your progress, climb the ranks, and compete with the Dometrain community.

    Learn more about Leaderboard
    Hands-On: Learn PostgreSQL
    course

    Hands-On: Learn PostgreSQL

    Learn PostgreSQL through hands-on coding exercises. Practice what you learn with interactive challenges designed for every level.

    Learn more about Hands-On: Learn PostgreSQL
    Free Hands-On: C# for Beginners
    course

    Free Hands-On: C# for Beginners

    Learn C# through hands-on coding exercises. Practice what you learn with interactive challenges designed for everyone, from beginners to experts.

    Learn more about Free Hands-On: C# for Beginners
    Getting Started: AI for .NET Developers
    course

    Getting Started: AI for .NET Developers

    Get started with integrating AI into your .NET applications effectively using the latest LLM best practices.

    Learn more about Getting Started: AI for .NET Developers
    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 about Getting Started: Building .NET Applications on AWS
    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 about What's new in C# 14
    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 about Let's Build It: AI Chatbot with RAG in .NET Using Your Data
    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 about From Zero to Hero: SignalR in .NET
    Deep Dive: Solution Architecture
    course

    Deep Dive: Solution Architecture

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

    Learn more about Deep Dive: Solution Architecture
    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 about Migrating: ASP.NET Web APIs to ASP.NET Core
    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 about Getting Started: Caching in .NET
    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 about From Zero to Hero: Testing with xUnit in C#
    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 about Create a ChatGPT Console AI Chatbot in C#