explaingit

heynickc/awesome-ddd

12,230Audience · developerComplexity · 1/5Setup · easy

TLDR

A curated collection of books, courses, blog posts, and code examples focused on Domain-Driven Design, CQRS, Event Sourcing, and Event Storming, software design approaches for tackling complex business problems.

Mindmap

mindmap
  root((awesome-ddd))
    Concepts
      Domain-Driven Design
      CQRS
      Event Sourcing
      Event Storming
    Resources
      Books and ebooks
      Video courses
      Blog posts
    Code Examples
      Go and NET
      JavaScript TypeScript
      JVM and PHP
    Community
      Forums and blogs
      Conferences
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Find the right book or course to learn Domain-Driven Design from scratch and build a shared vocabulary with your team.

USE CASE 2

Discover sample projects in your language, Go.NET, JavaScript, JVM, or PHP, that implement DDD and CQRS patterns.

USE CASE 3

Browse libraries and frameworks for your tech stack that provide Event Sourcing or CQRS building blocks you can adopt.

USE CASE 4

Find resources for running an Event Storming workshop with your team before writing any code.

Getting it running

Difficulty · easy Time to first run · 5min

In plain English

This repository is a curated reading and learning list, not a piece of software you install. It gathers links to books, video courses, blog posts, podcasts, sample projects, and code libraries all focused on a cluster of related software design ideas: Domain-Driven Design, CQRS, Event Sourcing, and Event Storming. Domain-Driven Design (DDD) is an approach to building software for complicated business problems. The central idea is that the software structure should closely reflect how the business itself thinks about the problem, and that developers should work hand-in-hand with the people who understand the business to build a shared vocabulary. CQRS, or Command Query Responsibility Segregation, is a pattern where reading data and changing data are handled by separate parts of the system rather than one combined piece. Event Sourcing is a way of recording application state by saving every change as a logged event, rather than just overwriting the current value. Event Storming is a group workshop technique for mapping out the flows and rules of a business domain before writing any code. The list is organized into sections: books (including the foundational "Blue Book" by Eric Evans that coined the term DDD), free ebooks, training courses, video collections, community forums, blogs, and sample projects. Sample projects are grouped by programming language, covering Go.NET (C# and F#), Haskell, JavaScript and TypeScript, JVM languages, and PHP. There is also a section of libraries and frameworks across those same language ecosystems that implement DDD or CQRS patterns, plus a tools section and links to user groups and conferences. The list was created by Nick Chamberlain and is maintained as a community resource. It follows the format of an "awesome list," a well-known style of open-source repository used on GitHub to aggregate quality references on a specific topic. Anyone can suggest additions via pull requests. The full README is longer than what was shown.

Copy-paste prompts

Prompt 1
Based on the awesome-ddd reading list, what is the recommended starting point for learning Domain-Driven Design, which book should I read first?
Prompt 2
I am building a .NET application and want to implement CQRS. Which libraries from the awesome-ddd list should I evaluate?
Prompt 3
Explain Event Sourcing to me as if I were a product manager: what business problem does it solve and when should my team use it?
Prompt 4
I am organizing an Event Storming workshop for my team. What resources from the awesome-ddd list cover the format and how to facilitate it?
Open on GitHub → Explain another repo

← heynickc on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.