Domain-Driven Design in Practice
A descriptive, in-depth walk-through for applying Domain-Driven Design principles in practice.
What you'll learn
While Domain-Driven Design offers invaluable insights regarding developing enterprise-level software projects, it is often unclear how to apply them in practice. In this course, we'll go through the whole process of building an application from the very beginning using the DDD principles.
Table of contents
- Getting Started 1m
- Course Outline and Prerequisites 2m
- Area of Application for Domain-Driven Design 4m
- Why Domain-Driven Design? 2m
- Main Concepts of Domain-Driven Design 4m
- Domain-Driven Design Is Not Only About Writing Code 3m
- Onion Architecture and Domain Isolation 4m
- Modeling Best Practices 1m
- Domain-Driven Design and Unit Testing 3m
- The Problem Domain Introduction 3m
- Summary 2m
- Introduction 1m
- Vocabulary Used 1m
- Problem Description 1m
- Starting with Snack Machine 4m
- Recap: Starting with Snack Machine 1m
- Entities vs. Value Objects 3m
- How to Recognize a Value Object in Your Domain Model? 3m
- Entity Base Class 2m
- Demo: Entity Base Class 3m
- Recap: Entity Base Class 1m
- Value Object Base Class 2m
- Recap: Value Object Base Class 1m
- Value Objects vs. .NET Value Types 1m
- When to Write Unit Tests 2m
- Implementing the Money Class 6m
- Building up the Money Class 5m
- Implementing the Snack Machine Class 5m
- Recap: Implementing Money and Snack Machine 2m
- Summary 3m
- Introduction 0m
- Application Services and UI in the Onion Architecture 2m
- Adding UI for the Snack Machine 9m
- Recap: Adding UI for the Snack Machine 2m
- Designing the Database for the Snack Machine 3m
- Introducing an ORM 3m
- ID Generation Strategies 3m
- Mapping Strategies 2m
- Adjusting the Domain Layer for the Use with ORM 4m
- Putting It All Together 3m
- Summary 1m
- Introduction 0m
- Problem Description 1m
- Starting with the Implementation 5m
- Aggregates 4m
- How to Find Boundaries for Aggregates 5m
- Aggregate Root Base Class 2m
- Refactoring the Snack Machine Aggregate 7m
- Recap: Refactoring the Snack Machine Aggregate 1m
- Implementing Missing Requirements 2m
- Revealing a Hidden Requirement 6m
- Recap: Revealing a Hidden Requirement 1m
- Summary 2m
- Introduction 1m
- New Task: an ATM Model 1m
- Bounded Contexts 2m
- Bounded Contexts and Sub-domains 2m
- Choosing Boundaries for Bounded Contexts 4m
- Drawing a Context Map 2m
- Types of Physical Isolation 4m
- Communication Between Bounded Contexts 2m
- Code Reuse Between Bounded Contexts 4m
- Implementing ATM Domain Logic 5m
- Adjusting the database 1m
- Adding UI 4m
- Summary 2m
- Introduction 0m
- New Requirements 1m
- Introducing a New Bounded Context 3m
- Implementation: the First Attempt 3m
- Domain Events 2m
- Introducing a Domain Event 3m
- Physical Delivery 1m
- Building up Management Bounded Context 3m
- Handling Domain Events with the Classic Approach 5m
- Recap: Classic Approach 3m
- A Better Approach to Handling Domain Events 7m
- Recap: a Better Approach 1m
- Using Domain Events to Communicate Between Microservices 1m
- Adding Interface for the Management Bounded Context 3m
- Summary 3m
- Introduction 0m
- Always Valid vs. Not Always Valid 4m
- Factories 2m
- Domain Services vs. Application Services 2m
- Anemic Domain Model Anti-pattern 2m
- Fat Entities Anti-pattern 1m
- Repository Anti-patterns 3m
- Mechanical Approach to DDD 1m
- Further Enhancements 2m
- Module Summary 2m
- Resource List 1m
- Course Summary 1m
Course FAQ
Domain-Driven Design is more of a philosophy than a technology or a strict methodology. DDD is based on making the project's primary focus the domain of the subject matter, basing the design on a model, and making sure that both technical experts and subject matter experts are working together on the design.
Domain-Driven Design in practice is generally more flexible and easier to update. It also resonates much more with the intended audience of the product because it's built from the ground up specifically for their subject matter.
The most common challenge when implementing Domain-Driven Design is finding subject matter experts to collaborate with on a project that is outside of their typical realm. Developers and domain experts need to have enough overlapping knowledge in order to bring a successful product to life.
This course is great for anyone who has struggled to understand how to apply Domain-Driven Design concepts in their own projects.
You will learn the principles of DDD, when to use Domain-Driven Design, and go through the whole process of creating an application using DDD.
You will need to have some basic experience with C#. It's also recommended that you've read the book Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans and that you've watched the Domain-Driven Design Fundamentals course by Julie Lerman and Steve Smith.