Awesome Domain-Driven Design
A curated list of Domain-Driven Design (DDD), Command Query Responsibility Segregation (CQRS), Event Sourcing, and Event Storming resources.
Check out my blog and weekly DDD newsletter or say hi on Twitter!
Domain-Driven Design (DDD) is an approach to software development for complex needs by connecting the implementation to an evolving model. The premise of Domain-Driven Design is the following:
- placing the project's primary focus on the core domain and domain logic
- basing complex designs on a model of the domain
- initiating a creative collaboration between technical and domain experts to iteratively refine a conceptual model that addresses particular domain problems
The term was coined by Eric Evans in his book of the same title.
Command Query Responsibility Segregation (CQRS) is simply the creation of two objects where there was previously only one. The separation occurs based upon whether the methods are a command or a query (the same definition that is used by Meyer in Command and Query Separation, a command is any method that mutates state and a query is any method that returns a value).
Event Sourcing the fundamental idea of Event Sourcing is that of ensuring every change to the state of an application is captured in an event object, and that these event objects are themselves stored in the sequence they were applied for the same lifetime as the application state itself.
Event Storming is a workshop format for quickly exploring complex business domains.
Contents
- Awesome Domain-Driven Design
Books
- Applying Domain Driven Design with CQRS and Event Sourcing - A walkthrough of using EventStorming and other modeling techniques to build a CQRS and Event Sourcing-based prototype for a fictional business domain.
- Architecture Modernization - Concrete tools, techniques, and processes to align software architecture with your business domains, organizational design, team topologies, and corporate strategy.
- Collaborative Software Design - A practical guide for effectively involving all stakeholders in the design of software.A practical guide for effectively involving all stakeholders in the design of software.
- CQRS - Notes by Mark Nijhof from his experiences learning DDD and CQRS from Greg Young. There is an extensive sample project that accompanies this book.
- Domain-Driven Design: Tackling the Complexity at the Heart of Software - The canonical book that coined the term Domain-Driven Design. Also known as the "Blue Book."
- Domain-Driven Design Distilled - Very good starter book before you read Implementing Domain-Driven Design or Domain-Driven Design: Tackling the Complexity at the Heart of Software.
- Domain-Driven Design in PHP - Real examples written in PHP showcasing DDD Architectural Styles, Tactical Design, and Bounded Context Integration.
- Domain-Driven Rails - Domain-Driven Rails describes 11 techniques (from Bounded Contexts to Event Sourcing) that you can use separately and together in new and old Rails apps to achieve better architecture.
- Domain Modeling Made Functional - Tackle Software Complexity with Domain-Driven Design and F#.
- Domain Specific Languages - Tangentially connected to DDD, describes the importance of the Ubiquitous Language and working together with domain experts, along with lots of technical details.
- Event Sourcing and CQRS with .NET Core and SQL Server - A walkthrough of using Domain-Driven Design with Event Sourcing and CQRS using ASP.NET Core and SQL Server in production.
- Hands-On Domain-Driven Design with .NET Core - Tackling complexity in the heart of software by putting DDD principles into practice by Alexey Zimarev.
- Implementing Domain-Driven Design - Also a canonical book presenting a top-down approach to understanding Domain-Driven Design. Also known as the "Red Book."
- Implementing DDD, CQRS and Event Sourcing - Learn how to implement DDD, CQRS and Event Sourcing. Understand the theory and put it into practice with JavaScript and Node.js.
- Introducing Event Storming: An act of Deliberate Collective Learning - The deepest tutorial and explanation about EventStorming, straight from the inventor.
- Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy - Learn the essential patterns and practices of domain-driven design and how to apply them in your day-to-day work, both in greenfield and brownfield projects.
- Microsoft .NET - Architecting Applications for the Enterprise (2nd Edition) - A software architect’s digest of core practices, pragmatically applied.
- Patterns, Principles, and Practices of Domain-Driven Design (1st Edition) - Methods for managing complex software construction following the practices, principles and patterns of Domain-Driven Design with code examples in C#.
- Secure by Design - Shows how to use Domain-Driven Design to avoid security vulnerabilities.
- Specification by Example - This book distills from the experience of leading teams worldwide effective ways to specify, test, and deliver software in short, iterative delivery cycles. Case studies in this book range from small web startups to large financial institutions, working in many processes including XP, Scrum, and Kanban.
- Versioning in an Event Sourced System - Have you had troubles with versioning an Event Sourced system? Just getting into a new Event Sourced system for the first time? This book is the definitive guide of how to handle versioning over long periods of time.
- What is Domain-Driven Design? - A quick read exploring the core patterns and principles of Domain-Driven Design, as well as strategies for applying DDD in brownfield projects.
- Writing Great Specifications - Writing Great Specifications is an example-rich tutorial that teaches you how to write good Gherkin specification documents that take advantage of Specification by Example's benefits.
Free eBooks
- The Anatomy of Domain-Driven Design - The Infographic - An infographic on the anatomy of Domain-Driven Design.
- Architecting Modern Web Applications with ASP.NET Core and Microsoft Azure - Provides end-to-end guidance on building monolithic web applications using DDD, ASP.NET Core, and Azure. eShopOnWeb sample
- Architecture Patterns with Python - A book about Pythonic application architecture patterns for managing complexity.
- CQRS Journey - Exploring CQRS and Event Sourcing.
- Domain-Driven Design: The First 15 Years - To celebrate the anniversary, we've asked prominent authors in the software design world to contribute old and new essays. With contributions by Martin Fowler, James Coplien, Rebecca Wirfs-Brock, Mel Conway, and many more.
- DDD Reference - A summary of the patterns and definitions of DDD.
- Domain Driven Design Quickly - Domain Driven Design Quickly is a short, quick-readable summary and introduction to the fundamentals of DDD.
- Effective Aggregate Design - In this three-part series, Vaughn Vernon walks through some common design pitfalls, discusses the pros and cons of various aggregate modeling choices, and provides rules of thumb to guide modeling of aggregates.
- Getting Started with DDD when Surrounded by Legacy Systems - Describes three strategies for getting started with DDD when you have a big commitment to legacy systems.
- Living Documentation by Design, with Domain-Driven Design - Discover how a Living Documentation can help you in all aspects of your projects, from the business goals to the business domain knowledge, architecture and design, processes and deployment, even if you hate writing documentation.
- .NET Microservices: Architecture for Containerized .NET Applications - An introduction to developing microservices-based applications and managing them using containers. eShopOnContainers sample
- The Semantic JavaScript Backend for Event-Driven Development - A 68 pages long free ebook on what DDD, CQRS and event-sourcing are, and how they fit each other.
- DDD Magazine from Xebia #1 - This magazine is packed with visionary and practical insights, based on personal, business, and customer experiences to support you on your DDD journey
- Visual Collaboration Tools - Visual Collaboration Tools is a book for teams building software. It describes tools that help us in our daily job, and also present field stories from different practitioners.
Training Courses
- Advanced Distributed Systems Design - Online training course from Udi Dahan. Udi's live training schedule can be found here.
- DDD Workshops across Europe and Online - Public Workshops by Eric Evans, Alberto Brandolini, Mathias Verraes, Rebecca Wirfs-Brock, Nick Tune, and many more.
- DDD Workshop by Xebia - public and in-house Domain-driven design workshops from foundation to professional level.
- Distilling Domain-Driven Design - Vaughn Vernon's online training course.
- Domain Language eLearning - Using our video lessons with Eric Evans, author of the original book on Domain-Driven Design (DDD), teach yourself techniques for evolving practical models that improve your software — not just your documents.
- Event Sourcery - Introduction to DDD, CQRS, and Event Sourcing.
- EventStorming Fundamentals Course (also in Spanish) - learn the fundamentals of EventStorming. Everything about EventStorming with examples.
- Greg Young's CQRS Class - These videos include the entirety of Greg Young's DDD, CQRS, and Event Sourcing class.
- Mixter - CQRS and Event Sourcing Koans.
- Nomad PHP - Introduction to Event Sourcing and CQRS.
- Pluralsight
- Domain-Driven Design Fundamentals - 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.
- Domain-Driven Design in Practice - A descriptive, in-depth walk-through for applying Domain-Driven Design principles in practice.
- Modern Software Architecture: Domain Models, CQRS, and Event Sourcing - This course covers DDD analysis patterns helpful in discovering the top-level architecture of a business domain. Architects and developers will find details of implementation patterns such as Domain Model, CQRS, and Event Sourcing.
- Rails + Domain Driven Design Workshop - Introduction to DDD, fundamentals of CQRS & Event Sourcing for Ruby/Rails developers.
- Reactive Architecture: CQRS and Event Sourcing - This course will discuss the reasons we use CQRS/ES, what benefits it provides us, but also what it will cost us to use. We will see how CQRS/ES can impact the scalability, consistency, and availability of our application.
- Reactive Architecture: Domain Driven Design - Use DDD to decompose a problem domain into manageable parts. Learn how those parts can become the foundation of Reactive Microservices and Reactive Architecture. Free, online, self-paced. Certificate offered upon completion.
- Spatie's Event Sourcing Course - Learn how to build event sourced applications in Laravel using Spatie's event-sourcing package. Has 2 hours of video content and an accompanying ebook.
Video Collections
- DDD Europe - Recordings of talks given at DDD Europe.
- SkillsCasts by SkillsMatter - Searching DDD returns various talks given by Greg Young, Alberto Brandolini, and Dan North, etc.
- Alberto Brandolini: Event Storming - A YouTube collection of talks given by Alberto Brandolini on Event Storming.
- GlobalAppTesting TechTalks - A vimeo channel focused on DDD and CQRS.
- [Greg