Domain-Driven Design Fundamentals
This course teaches the fundamentals of Domain-Driven Design (DDD) through a demonstration of customer interactions and a complex demo application, along with advice from Eric Evans.
What you'll learn
Hello, and welcome to Domain-Driven Design Fundamentals, part of the ASP.NET MVC 5 Learning Path here at Pluralsight. Your authors, Steve Smith and Julie Lerman, are looking forward to helping you learn the fundamentals of Domain-Driven Design (DDD) through a demonstration of customer interactions and a complex demo application.
Along the way, you’ll learn about elements of a domain model, aggregates in Domain-Driven Design, and repositories. You’ll also get hands on modeling problems, and learn about technical components of DDD, and how to manage complexity.
So if you’re ready to get started, Domain-Driven Design Fundamentals is waiting for you. Thanks again for visiting us here at Pluralsight!
Table of contents
- Introduction 0m
- 10 Years of Domain-Driven Design 1m
- What's in This Course? 1m
- Eric Evans' Participation in This Course 1m
- Why Should You Care About Domain-Driven Design? 2m
- High Level View of DDD 1: Interaction With Domain Experts 1m
- Eric Evans on the Importance of Communication 0m
- High Level View of DDD 2: Focus on a SubDomain 1m
- High Level View of DDD 3: Implementing the SubDomain 1m
- Benefits of DDD 2m
- Drawbacks of DDD 2m
- A Mind Map of DDD's Working Parts 3m
- Overview of the App Used in This Course 6m
- Key Takeaways 1m
- Resources 1m
- Introduction 0m
- Goals? 1m
- Learning About Our Domain by Talking With a Domain Expert 5m
- Breaking the Domain Into Sub-domains 1m
- Focusing on One Sub-domain With the Domain Expert 5m
- First High-level Model of the Sub-domain 1m
- Creating a Bounded Context 5m
- Difference Between Sub-domain and Bounded Context 3m
- Understanding Context Maps 5m
- Eric Evans on Clearly Defining Context Boundaries 2m
- Bounded Contexts in Our Application 1m
- The Ubiquitous Language of a Bounded Context 4m
- Working on a Ubiquitous Language With the Domain Expert 5m
- Glossary of Terms From This Module 5m
- A Quick Review 1m
- Resources 1m
- Introduction 0m
- Goals 1m
- The Importance of Understanding DDD Terminology 2m
- Focus on the Domain 3m
- Anemic and Rich Models 2m
- Entities in DDD and in Our Bounded Context 9m
- Eric Evans on the Single Responsibility of Entities 6m
- Eric Evans on the Entity Equality Methods 2m
- How We've Implemented Entities in Our Code 8m
- Associations (aka Relationships) 4m
- Value Objects 7m
- Eric Evans on the Methods in Value Objects 3m
- Value Objects in Our Code 4m
- Eric Evans on the Entity Logic in Value Objects 1m
- Domain Services 3m
- Glossary 3m
- Key Takeaways 1m
- Resources 1m
- Introduction 0m
- Goals 1m
- Tackling Data Complexity 2m
- Introducing Aggregates and Aggregate Roots 3m
- Interacting With Aggregates 2m
- Evolving the Appointments Aggregate 2m
- Using Invariants to Better Understand Our Aggregate 2m
- Modeling Breakthroughs and Refactoring 1m
- Considering Schedule as Our New Aggregate 2m
- The Schedule Aggregate in Our Application 6m
- Review Aggregate Tips 1m
- Glossary 1m
- Resources 1m
- Introduction 0m
- Goals 0m
- Introducing Repositories 4m
- Repository Tips, Benefits, and Guidance 7m
- Comparing Repositories and Factories 1m
- To IRepository T or Not to IRepository T? 1m
- Generic Repositories in DDD 2m
- Repositories in Our Application 5m
- Refactoring for Better Separation 6m
- Glossary 2m
- References 0m
- Introduction 0m
- Goals 1m
- Our Current System Design 1m
- Discussing a New Feature With the Domain Expert 2m
- Planning the Implementation 1m
- Adding a Message Queue Between Our Apps 6m
- Combining Message Queues, Events, and Services 6m
- Debugging to See Detailed Implementation in Code 11m
- Homework: Extending the App Again 1m
- Considering the UI When Designing the Domain 3m
- Eric Evans on the Fallacy of Perfectionism 3m
- Remember This From This Module! 1m
- Glossary 1m
- References 2m
Course FAQ
Domain Driven Design (DDD) is a way of more easily developing complex software by strongly connecting all of the software's related pieces into an ever-evolving model of the core business logic.
The domain in domain driven design is the "sphere of knowledge and activity around which the application logic revolves". It's the thing we want the application to apply to.
You will learn:
- Elements of a domain model
- The benefits of Domain-Driven Design
- Aggregates in Domain-Driven Design
- Repositories
- How DDD solves modeling problems in software
- Domain events and anti-corruption layers
- Much more
Before diving into Domain Driven Design you should have a good understanding of an object-oriented language like C#, Ruby, JavaScript, Python, Java, or another. A basic understanding of software architecture would also be helpful.
Some benefits of DDD include that it provides patterns to solve difficult software problems, and even business problems, it creates business logic by putting everything in terms of the business domain, and it mitigates misunderstanding between dev teams and domain experts.