Domain-Driven Design

Page is in writing

Domain-Driven Design is extremely important for successfully delivering and maintaining CQRS-based systems. DDD works as a strategic approach that allows to break complex problem domains into separate blocks (called bounded contexts), while accounting for things like: different mental models, organizational politics, domain linguistics etc. While doing that, DDD establishes a mental model of bounded context, that is both understandable by business people and can easily be implemented in the code.

CQRS, as a tactical approach, is one of the best ways to implement DDD-modelled domains. In fact, it was born in this world.

These are the common questions that are actually answered by DDD:

  • How do I define my Aggregates?
  • How do I we name and structure commands and events?

Essential Resources

The Blue Book by Eric Evans

The best way to start with Domain-Driven Design is to read the original book by Eric Evans: Domain-Driven Design: Tackling Complexity in the Heart of Software (available in paper and as e-book). Read it in this order:

  • From 11th chapter to the end.
  • From the beginning to the end.

Effective Aggregate Design by Vaughn Vernon

Vaughn Vernon (twitter) has a book in writing. Till it gets published, you can study these materials:

  • Effective Aggregate Design 1: PDF
  • Effective Aggregate Design 2: PDF | Video
  • Effective Aggregate Design 3: PDF | Video

DDDD Work by Greg Young

Back in 2010 Greg Young was working on Distributed Domain-Driven Design, which was based on DDD and later became known as CQRS. Although the material might be a little bit old, it is still really good. You can read and watch it while waiting for Greg's book to come out.

This material is given at the end, since it covers both DDD and CQRS with Event Sourcing.

  • DDDD by Greg Young: PDF
  • Free online class (6 hours): Video

Outside of Scope

DDD resources are outside focus of this guide. Read them only if you have spare time:

  • Applying Domain-Driven Design and Patterns: With Examples in C# and .NET by Jimmy Nilsson
  • NET Domain-Driven Design with C#: Problem, Design, Solution by Tim McCarthy
  • Domain Driven Design Quickly
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License