/awesome-ddd

A curated list of Domain-Driven Design (DDD), Command Query Responsibility Segregation (CQRS), Event Sourcing, and Event Storming resources

Awesome Domain-Driven Design Awesome

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

Books

Free eBooks

Training Courses

Video Collections

Community Resources

Blogs

  • Nick Chamberlain - Helpful development and design advice for .NET developers.
  • DDD Weekly - Weekly curated links related to DDD/CQRS/ES.
  • Daniel Whittaker - Want to learn about CQRS and Event Sourcing? This blog is packed with step-by-step articles to give you a head start.
  • Cyrille Martraire - Being so immersed in finance while still in love with programming, I’m naturally a big fan of Domain-Driven Design by Eric Evans, along with TDD, BDD and agile/XP practices.
  • Jimmy Bogard - I focus on DDD, distributed systems, and any other acronym-centric design/architecture/methodology.
  • CodeBetter - CodeBetter.Com exists in order to help foster awareness of better practices, superior tools, proven methodologies and techniques within the software development community.
  • Greg Young - Good Enough Software is By Definition Good Enough.
  • InfoQ Blog - Domain-Driven Design Content on InfoQ.
  • Dan North - Inventor of Behavior-Driven Design. Blogs and talks about Event Storming also.
  • Mike Mogosanu - Maintainable code is a business advantage. Creator of Domain Map: The Domain Modeling Tool - Easy And Powerful Domain Driven Design.
  • Christian Posta - Principal Middleware Architect @ Red Hat, open-source enthusiast, committer @ Apache, Cloud, Integration, Kubernetes, Docker, OpenShift, Fabric8.
  • Vladimir Khorikov - Pluralsight author. Blogs about software development principles and best practices.
  • TechBeacon - Articles on TechBeacon tagged domain driven design.
  • Derek Comartin - Articles under the category Domain Driven Design.
  • Alberto Brandolini - Inventor of Event Storming. Asserting that problems cannot be solved with the same mindset that originated them, Alberto switches perspective frequently assuming the architect, mentor, coach, manager or developer point of view.
  • Jérémie Chassaing - Various articles about DDD/CQRS. Implemented Greg Young's SimpleCQRS sample in F#.
  • Vaughn Vernon - Vaughn Vernon understands the unique demands of software development and the challenges you face as you improve your craft in a fast-paced industry.
  • Vladik Khononov - Various DDD-related articles.
  • Eventsourcing Publications - Practical event sourcing.
  • Jef Claes - Excellent articles and talks on Domain-Driven Design.
  • Udi Dahan - From the creator of NServiceBus.
  • Chris Patterson - From the creator of the MassTransit distributed application framework.
  • Aaron Stannard - From the CTO and co-founder of Petabridge, developers of the Akka.NET Actor Model framework.
  • Roger Johansson - Mostly C#, DDD, and Akka.NET.
  • Konrad Garus - Ranting and Programming in Java, Clojure, and JavaScript. Articles tagged under cqrs.
  • Oasis Digital - Content by Oasis Digital tagged under cqrs.
  • Adaptech - Adaptech Solutions blog. Our founder, Adam Dymitruk, debated the merits of CQRS with Greg Young before Greg coined the term. Adam and business partner Robert Reppel are among the leading practitioners of event-sourced microservices.
  • Lev Gorodinski - Several articles about DDD from 2013, which are still relevant.
  • Dino Esposito - Software architect, trainer, book author. Author of Microsoft .NET - Architecting Applications for the Enterprise (2nd Edition).
  • Dan Bergh Johnsson "Dear Junior" - Domain-Driven Design mixed with security, and agile in general. Written as fictional letters to a younger programmer.
  • the native web - DDD & Co. series
  • Arkency - Various DDD, CQRS, Event Sourcing related articles from Ruby experts.
  • Svaťa Šimara - DDD series - language, domain, modeling, infrastructure, implementation in PHP
  • Martin Havlišta - DDD, CQRS, TDD blog posts with code samples in C# .NET
  • Khalil Stemmler - DDD series introduction and talk about how to implement DDD with TypeScript
  • Kenny Baas-Schwegler - DDD, BDD, Socio-technical, EventStorming and continuous delivery blogs.

Sample Projects

.NET (C#/F#)

  • Better code with DDD building blocks - solution presents usage of DDD tactical patterns to achieve better readability and expressiveness of the code. Applying DDD patterns together with ubiquitous language closes the gap between language spoken by experts and the team and language used in the code.
  • CQRS-DDD Example - Domain Driven Design, CQRS, & Event Sourcing Example using GetEventStore, CommonDomain, NServiceBus, Entity Framework, SQL Server, SignalR.
  • Companion Code for Microsoft .NET Architecting Applications for the Enterprise - An event based Micro ERP.
  • ContosoUniversityCore - ContosoUniversity on ASP.NET Core with Full .NET Framework.
  • DDDInventoryItemFSharp - An idiomatic F# implementation of Domain-Driven Design
  • DDDSkeletonNet (C#) - a .NET skeleton project to introduce the concepts of Domain Driven Design and loosely coupled layers.
  • DotNet CQRS Intro - Examples of implementation CQRS with Event Sourcing - evolutionary approach (no CQRS, separate models and commands with the same model, separate models and commands with separate models, separate storage engines, event sourcing).
  • EISK - .NET CLI and VS Templates with simple use cases to build scalable applications on top of .net core with architectural best practices (DDD, onion architecture etc).
  • EmailMaker - Email marketing ASP.NET Core MVC and ASP.NET MVC demo app demonstrating CoreDdd usage
  • eShopOnContainersDDD - eShop fullstack example featuring catalog, basket, checkout, and order bounded contexts
  • Equinox Project - Full ASP.NET Core 2.0 application with DDD, CQRS and Event Sourcing
  • Example of Domain-Driven Design in F# - Example of Domain Driven Design for the game of checkers. There are two files: a scratch file with a series of designs, and a final version.
  • Event Sourcing .NET - samples and resources about Event Sourcing and CQRS in .NET. Contains also a self-paced kit of how to built own Event Store
  • Fohjin - Example project that accompanies Mark Nijhof's CQRS book.
  • FsUno - Event sourcing implementation sample in F#.
  • IDDD Samples in .NET - These are the sample Bounded Contexts for C#.NET from the book "Implementing Domain-Driven Design" by Vaughn Vernon.
  • Microsoft Patterns and Practices: CQRS Journey Sample Code - Sample code from CQRS Journey.
  • Modular Monolith - Full Modular Monolith .NET application with Domain-Driven Design approach.
  • NLayerAppV3 (.Net Core Preview 2) - a N-Layered Architecture Sample Project.
  • Photostock CQRS-DDD Example
  • Reactive Trader Cloud - Reactive Trader Cloud by Adaptive Consulting.
  • Sample .NET Core CQRS REST API - .NET Core REST API CQRS implementation with raw SQL and DDD using Clean Architecture.
  • Scritchy - CQRS without the Plumbing, video.
  • Simple CQRS in F# - Greg Young's SimpleCQRS in F#.
  • SimpleCQRS - Greg Young's "Simplest Thing" CQRS with Event Sourcing project.
  • TodoMVC-DDD-CQRS-EventSourcing - Implementation of basic Todo app via tastejs/todomvc in C#/Typescript with eventsourcing, cqrs, and domain driven design

Haskell

  • Eventuria gsd - Haskell todo list reactive application with DDD, CQRS and Event Sourcing, FRP.

JavaScript

JVM languages

  • Akka CQRS ES Demo - Demo project to implement the CQRS and Event Sourcing patterns in Scala-Akka.
  • DDD By Examples - Library - sample project of a library driven by real business requirements. Modular monolith implemented with the help od DDD, BDD, EventStorming, Example Mapping, CQRS, and more.
  • DDD Leaven - DDD-CQRS sample v2.0 project that helps you with starting out advanced domain modeling using Spring, JPA and testing.
  • DDD Workshop - Project Manager - "Do It Yourself" DDD workshop and a sample DDD application at the same time. Based on a project managing domain.
  • Event Sourcing Example - A simplified (in memory) example of Event Sourcing and CQRS implementation for Java code (modeled for banking domain use cases).
  • Event Sourcing and CQRS Examples - A pragmatic application of Event Sourcing and CQRS in Java with good references for common related problems, e.g. event ordering and idempotency.
  • Event Sourcing and CQRS Sample - Sample event sourced application with Command Query Responsibility Segregation
  • IDDD Samples - These are the sample Bounded Contexts from the book "Implementing Domain-Driven Design" by Vaughn Vernon.
  • Java CQRS Intro - Examples of implementation CQRS with Event Sourcing - evolutionary approach (no CQRS, separate models and commands with the same model, separate models and commands with separate models, separate storage engines, event sourcing).
  • Kotlin DDD Sample - Sample DDD/CQRS project written in Kotlin.
  • EventStormingWorkshop - Designing Cloud Native Microservices On AWS - A concrete sample to go through EventStorming workshop and implement DDD tactical design pattern in Java, apply AWS cloud native services to build up business Event based Coffeeshop scenario.

PHP

  • DDD Wish List - A sample application in PHP built with Symfony 3 and Vue.js.
  • DDD Playground - Sample implementation in PHP.
  • Eric Evans DDD Cargo Sample - PHP 7 Version of the cargo sample used in Eric Evans DDD book
  • Shop Cart in PHP - Sample project that demonstrates how simple shop cart can look like. Domain objects,Doctrine integration.,TDD,layers,unit testing

Libraries and Frameworks

.NET

  • Aggregates.NET - .NET event sourced domain driven design model via NServicebus and GetEventStore.
  • AggregateSource - Lightweight infrastructure for doing eventsourcing using aggregates.
  • Akka.NET - Akka.NET is a toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications on .NET & Mono.
  • ABP - Successor of ASP.NET Boilerplate - ASP.NET Core based application framework to create NLayered, Domain Driven Designed web applications with a microservice focused modular architecture
  • ASP.NET Boilerplate - ASP.NET MVC, Web API and ASP.NET Core based application framework to create NLayered, Domain Driven Designed web Applications implementing best practices.
  • ByValue - This library helps to create ValueObjects (even with collection properties) with properly implemented equality behavior.
  • Cedar.CommandHandling - Middleware to handling commands over HTTP; typically used in CQRS applications.
  • Cirqus - d60 event sourcing + CQRS framework.
  • CoreDdd - Set of open-source .NET libraries helping with DDD and CQRS, with NHibernate persistence
  • CQRS on Azure CQRS on Windows Azure.
  • Dolittle - Build better applications with Dolittle. An Event Sourced, Microservice platform oriented around DDD with developer productivity and simplicity front and center.
  • EventFlow - Async/await first CQRS+ES and DDD framework for .NET http://geteventflow.net/.
  • Core.EventStore - A library to facilitate communication between CommandService and QueryService. The Idea is when any event occures in commandService, it should be persisted in QueryService in MongoDb.
  • Its.Cqrs - A set of libraries for CQRS and Event Sourcing, with a Domain-Driven Design flavor.
  • Marten - Postgresql as a Document Database and Event Store for .Net Applications.
  • MassTransit - Distributed Application Framework for .NET.
  • MediatR - Supports request/response, commands, queries, notifications and events, synchronous and async with intelligent dispatching via C# generic variance.
  • MessageRouter - Described in this video: The Beating Heart of CQRS, or Actor-Based Message Routing on the CLR by Paulmichael Blasucci at the New York F# .NET User Group.
  • NEventStore - A persistence library used to abstract different storage implementations when using event sourcing as storage mechanism.
  • NServiceBus - Service bus for .NET.
  • Projac - Projac is a set of projection libraries that allow you to write projections targetting various backing stores.
  • shriek-fx - An simple,elegant and useful Domain-Driven Design and CQRS framework developed using .NET Core 2.0.
  • SqlStreamStore - .NET Stream Store library targeting SQL based implementations.
  • Streamstone - Event Store for Azure Table Storage.
  • Stringly.Typed - Making it easier to convert strings to/from .NET types.
  • Xer.Cqrs - A simple library for creating applications based on the CQRS pattern with support for attribute routing and hosted handlers. Developed in C# targeting .NET Standard 1.0.

Databases

  • Event Store - The open-source, functional database with Complex Event Processing in JavaScript.
  • Eventsourcing - Business event capture and querying framework.

Elixir

  • Commanded - Command handling middleware for CQRS/ES applications, Pure Functional Data Structures for Aggregates and Process Managers, Point-to-Point message routing, and much more in Elixir (Erlang VM) - All in Actor concurrency model.
  • Event Bus - Traceable, extendable and minimalist event bus implementation for Elixir with built-in event store and event watcher based on ETS.
  • eventstore - CQRS event store using PostgreSQL for persistence.

JavaScript

JVM

  • akka-ddd - Reusable artifacts for building applications on top of the Akka platform following CQRS/DDDD-based approach.
  • Apache Isis - Apache Isis is a framework for rapidly developing domain-driven apps in Java.
  • Axon Framework - The axon framework is focused on making life easier for developers that want to create a java application based on the CQRS principles.
  • JESA - Event sourced aggregates for Java.
  • Lagom - The Lagom Framework is a microservices framework for the Java Virtual Machine, with APIs for the Java and Scala languages. It includes an Event Sourcing/CQRS based persistence module.
  • SeedStack's Business Framework - A set of building blocks that enable you to code business logic according to the Domain-Driven Design (DDD) approach.

PHP

  • Broadway - Broadway is a (PHP) project providing infrastructure and testing helpers for creating CQRS and event sourced applications.
  • Ecotone - Enables message driven architecture in PHP and provides building blocks to follow DDD and CQRS principles.

Python

  • Eventsoucing in Python - Mature, stable Python library for event sourcing and DDD. Supports wide variety of databases, different kinds of orderings of domain events, application level encryption, snapshotting, optimistic concurrency control, and process events. Applications, and entire systems of applications, can be defined independently of infrastructure, and run in different ways (single threaded, multi-threaded, clocked, stepping, multi-process, actor model) and with different infrastructure.

Ruby

  • Rails Event Store - Rails Event Store (RES) is a library for publishing, consuming, storing and retrieving events. It's your best companion for going with an event-driven architecture for your Rails application.

Podcasts and Interviews

Conferences

User Groups

Tools

  • Domain Storytelling - a knowledge-crunching technique that helps the people involved to familiarize themselves with the domain and work out a model that expresses their shared understanding. Available as a print-out template, as well as open-source online tool, WPS Modeler (source).

License

CC0

To the extent possible under law, Nick Chamberlain has waived all copyright and related or neighboring rights to this work.